Jac*_* K. 5 uitabbarcontroller ios swift
在我的 Swift 应用程序中,我有一个处理UITabBar.
class CustomTabBar: UITabBar {
override func awakeFromNib() {
super.awakeFromNib()
}
}
Run Code Online (Sandbox Code Playgroud)
当用户点击它们时,如何为项目设置动画?我的意思是 aCGAffine(scaleX: 1.1, y: 1.1)
那么我如何为标签栏的项目设置动画?
UITabBarController如下:
import UIKit
enum TabbarItemTag: Int {
case firstViewController = 101
case secondViewConroller = 102
}
class CustomTabBarController: UITabBarController {
var firstTabbarItemImageView: UIImageView!
var secondTabbarItemImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let firstItemView = tabBar.subviews.first!
firstTabbarItemImageView = firstItemView.subviews.first as? UIImageView
firstTabbarItemImageView.contentMode = .center
let secondItemView = self.tabBar.subviews[1]
self.secondTabbarItemImageView = secondItemView.subviews.first as? UIImageView
self.secondTabbarItemImageView.contentMode = .center
}
private func animate(_ imageView: UIImageView) {
UIView.animate(withDuration: 0.1, animations: {
imageView.transform = CGAffineTransform(scaleX: 1.25, y: 1.25)
}) { _ in
UIView.animate(withDuration: 0.25, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 3.0, options: .curveEaseInOut, animations: {
imageView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
}, completion: nil)
}
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let tabbarItemTag = TabbarItemTag(rawValue: item.tag) else {
return
}
switch tabbarItemTag {
case .firstViewController:
animate(firstTabbarItemImageView)
case .secondViewConroller:
animate(secondTabbarItemImageView)
}
}
}
Run Code Online (Sandbox Code Playgroud)
tag值tabBarItem:
第一个视图控制器:
import UIKit
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
tabBarItem.tag = TabbarItemTag.firstViewController.rawValue
}
}
Run Code Online (Sandbox Code Playgroud)
第二个视图控制器:
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
tabBarItem.tag = TabbarItemTag.secondViewConroller.rawValue
}
}
Run Code Online (Sandbox Code Playgroud)
确保您的故事板(如果您正在使用)已经设置了所有内容,就这样!
输出:
你可以检查回购:
https://github.com/AhmadFayyas/Animated-TabbarItem/tree/master
为了证明答案。
小智 7
这对我有用:
class MyCustomTabController: UITabBarController {
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let barItemView = item.value(forKey: "view") as? UIView else { return }
let timeInterval: TimeInterval = 0.3
let propertyAnimator = UIViewPropertyAnimator(duration: timeInterval, dampingRatio: 0.5) {
barItemView.transform = CGAffineTransform.identity.scaledBy(x: 0.9, y: 0.9)
}
propertyAnimator.addAnimations({ barItemView.transform = .identity }, delayFactor: CGFloat(timeInterval))
propertyAnimator.startAnimation()
}
}
Run Code Online (Sandbox Code Playgroud)
由于UITabBarItem不是UIView子类,而是NSObject子类,因此没有直接的方法可以在点击时为项目设置动画。
您要么必须挖掘UIView属于该项目的内容并为其设置动画,要么创建一个自定义选项卡栏。
这里有一些挖掘UIView. 这里举例说明如何在点击项目时触发。但使用这种方法要非常小心:
UITabBar实施方式,这可能会打破这一点。顺便说一句,不需要子类化UITabBar。UITabBarDelegate您所需要的就是实施。
实际上,我建议您坚持使用标准UITabBar行为和皮肤选项,然后稍后再解决,或者根本不解决。诸如此类的事情会消耗您的时间,而不会为应用程序增加太多内容。
| 归档时间: |
|
| 查看次数: |
3665 次 |
| 最近记录: |