Swift и Xcode-как создать пользовательские значки панели вкладок
У меня есть проект приложения с вкладками, над которым я работаю в Xcode, написанном на Swift (Xcode 6.3 and Swift 1.2
). У меня много проблем с пользовательскими значками на панели вкладок. Я разработал изображение в Photoshop (CS6), сохранил его в формате PNG, изменил его размер в Prepo до 30x30
и импортировал его в Xcode в библиотеке активов. Затем я установил значок tab view controllers
на это изображение. Однако он не появляется.
Я просмотрел эти страницы, но не нашел ни одной помогите:
https://www.youtube.com/watch?v=4qqqoAWNfZA
пользовательские цвета значков на панели вкладок
http://www.raywenderlich.com/forums/viewtopic.php?f=2&t=19333
http://www.appcoda.com/ios-programming-how-to-customize-tab-bar-background-appearance/
https://www.youtube.com/watch?v=4Tj_SeApUrs
Каков правильный процесс создания пользовательских значков на панели вкладок?
4 ответа:
После небольшого исследования я решил эту проблему, поэтому решил написать здесь, Если у кого-то еще есть подобная проблема. В Photoshop я сделал следующее:
- импортировал изображение, которое я хотел использовать в качестве значка панели вкладок (это проще, если вы используете черно-белое изображение, чтобы вам не нужно было удалять цвет).
- установите фон "прозрачным", а не белым.
- удалил все белое из изображения так, чтобы это было просто черное изображение с прозрачным фон.
- сохранено изображение как a .формат PNG.
- изменил размер изображения на квадрат с размерами
75x75 pixels
(и назвал егоimageName@3x.png
),50x50 pixels
(и названimageName@2x.png
), и25x25 pixels
(и названimageName.png
)В Xcode я сделал следующее:
- перетащил изображения в Xcode и переименовал группу изображений в
icoImageName
.- выбрал вкладку, для которой я хотел установить изображение в раскадровке в Xcode, и установил "изображение" (под "элементом панели" в панели инспектора) на
icoImageName
. Обратите внимание, что я сделал не устанавливайте "выбранное изображение" под "элементом панели вкладок" (оставьте это поле пустым).Готово.
Я надеюсь, что это кому-то поможет. Спасибо всем и каждому за их помощь.
Похоже, что у вас все настроено правильно в xCode. Проблема заключается в файле png, который вы используете.
Загрузите это изображение, http://i.stack.imgur.com/zluev.png , и посмотреть, сохраняется ли проблема.
Согласно ответу на uitabbaritem изображения просто появляются в виде серого блока:
Стандартная панель вкладок иконки в iOS оказываются исключительно с альфа-каналом. Цвета полностью игнорируются. Вместо цветов вы можете использовать различные Альфа значения, которые приводят к другому оттенку серого (или синего, если выбран)
Сделайте фон ваших иконок прозрачным.
Вы создали представление вкладки в interface builder? Если да, то, поскольку вы добавили изображения в качестве ресурса, они должны отображаться в свойстве "изображение" каждой кнопки вкладки под боковой панелью инспектора. Кроме того, я знаю, что вы уже опубликовали кучу учебников, но этот довольно современен и подробно объясняет это: http://codewithchris.com/ios-tab-bar-app/
class ViewController: UIViewController { @IBOutlet var btnHome : UIButton! @IBOutlet var btnInvoice : UIButton! @IBOutlet var btnSettings : UIButton! @IBOutlet var btnMyOrder : UIButton! @IBOutlet var btnLogout : UIButton! @IBOutlet weak var viewContainer: UIView! var navController : UINavigationController! var selectedIndex : Int! = 0 var arrTabColor = [UIColor(red: 35.0/255.0, green: 93.0/255.0, blue: 175.0/255.0, alpha: 1.0), UIColor(red: 29.0/255.0, green: 86.0/255.0, blue: 167.0/255.0, alpha: 1.0), UIColor(red: 35.0/255.0, green: 93.0/255.0, blue: 175.0/255.0, alpha: 1.0), UIColor(red: 29.0/255.0, green: 86.0/255.0, blue: 167.0/255.0, alpha: 1.0), UIColor(red: 35.0/255.0, green: 93.0/255.0, blue: 175.0/255.0, alpha: 1.0)] var arrTabIdentiFierVC = ["FirstVC","SecondVC","FirstVC","FirstVC","SecondVC"] // MARK: - Life Cycle override func viewDidLoad() { super.viewDidLoad() setTabbarImage(0) // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func setTabBarClicked(_ storyIdentifier : String,identifier : String) { let aStoryboard = UIStoryboard.init(name: storyIdentifier, bundle: nil) let newViewController = aStoryboard.instantiateViewController(withIdentifier: identifier) navController = UINavigationController(rootViewController: newViewController) self.addChildViewController(navController) navController.view.frame = viewContainer.frame newViewController.view.frame = viewContainer.frame self.viewContainer.addSubview(navController.view) newViewController.didMove(toParentViewController: self) } func setTabbarImage(_ selectedIndex : Int!) { btnHome.backgroundColor = arrTabColor[0] btnInvoice.backgroundColor = arrTabColor[1] btnSettings.backgroundColor = arrTabColor[2] btnMyOrder.backgroundColor = arrTabColor[3] btnLogout.backgroundColor = arrTabColor[4] let selectedColor = UIColor(red: 40/255, green: 142/255, blue: 206.0/255, alpha: 1.0) if selectedIndex == 0 { btnHome.backgroundColor = selectedColor } else if selectedIndex == 1 { btnInvoice.backgroundColor = selectedColor } else if selectedIndex == 2 { btnSettings.backgroundColor = selectedColor } else if selectedIndex == 3 { btnMyOrder.backgroundColor = selectedColor } else if selectedIndex == 4 { btnLogout.backgroundColor = selectedColor } } // MARK: - Action Method @IBAction func HomeClicked(_ sender : AnyObject?) { setTabbarImage(0) setTabBarClicked("Main",identifier: arrTabIdentiFierVC[0]) } @IBAction func InvoiceClicked(_ sender : AnyObject?) { setTabbarImage(1) setTabBarClicked("Main",identifier: arrTabIdentiFierVC[1]) } @IBAction func SettingClicked(_ sender : AnyObject?) { setTabbarImage(2) setTabBarClicked("Main",identifier: arrTabIdentiFierVC[2]) } @IBAction func MyorderClicked(_ sender : AnyObject?) { setTabbarImage(3) setTabBarClicked("Main",identifier: arrTabIdentiFierVC[3]) } @IBAction func logoutClicked(_ sender : AnyObject?) { setTabbarImage(4) let alert = UIAlertController(title: "", message: "Are you sure want to logout?", preferredStyle: UIAlertControllerStyle.alert) let CancelAction = UIAlertAction(title: "NO", style: .default) { (action:UIAlertAction!) in } alert.addAction(CancelAction) let OKAction = UIAlertAction(title: "YES", style: .default) { (action:UIAlertAction!) in // var isNav : Bool! = false //for objChild in (self.parent?.childViewControllers)! // { // if objChild.isKind(of: LoginVC.self) // { // self.navigationController!.popToViewController(objChild, animated: true) // CommonMethods.removeCustomObject(Constants.kUserProfile) // // isNav = true // break // // } // } // if !isNav // { // CommonMethods.removeCustomObject(Constants.kUserProfile) // let aNavController = (AppDelegate.getDelegate().window!.rootViewController! as! UINavigationController) // let storyboard = UIStoryboard(name: "Main", bundle: nil) // var aVCObj = UIViewController() // aVCObj = storyboard.instantiateViewController(withIdentifier: "LoginVC") // var aMutArr = aNavController.viewControllers // aMutArr.insert(aVCObj, at: 0) // aNavController.viewControllers = aMutArr // aNavController.popToRootViewController(animated: true) // } } alert.addAction(OKAction) self.present(alert, animated: true, completion: nil) } // MARK: - Action Method }