gpt4 book ai didi

ios - 无法从 UITabBar 快速获取 UIImageView

转载 作者:行者123 更新时间:2023-11-28 06:21:04 30 4
gpt4 key购买 nike

我正在关注 tutorial动画标签栏图像。给定的代码行对我不起作用

secondItemView.subviews.first as! UIImageView

因为它获取类型为 UITabBarButtonLabel 而不是 UIImageView 的数据。我添加了标签值 1 以便我可以使用标签值获取 UIImageView enter image description here

secondItemView.viewWithTag(1)

返回零。获取 UIImageView 引用的另一种方法是什么?

代码

@objc public class MTMainScreenTabsController : UITabBarController {
var secondItemImageView: UIImageView!
public override func viewDidLoad() {
super.viewDidLoad()
let secondItemView = self.tabBar.subviews[0]


print(secondItemView.subviews)
print(secondItemView.viewWithTag(1))

//self.secondItemImageView = secondItemView.subviews.secon
var item: UITabBarItem! = self.tabBar.items![0]


//self.secondItemImageView = secondItemView.viewWithTag(1) as! UIImageView
}

public override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}

public override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if item.tag == 1 {
self.secondItemImageView.transform = .identity
UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
() -> Void in
//let rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
let rotation = CGAffineTransform.init(rotationAngle: CGFloat(Double.pi/2))
self.secondItemImageView.transform = rotation
}, completion: nil)
}
}

最佳答案

严格依赖 subview 的顺序不是一个好习惯,因为它可能会在未来发生变化。如果您确定 secondItemView.subviews 包含 UIImageView 的实例,您可以这样找到它:

let imageView = secondItemView.subviews.flatMap { $0 as? UIImageView }.first

imageView 变量将是一个可选的,包含 nil 或一个实际的 UIImageView 如果有任何这种类型的 subview 。平面 map 将遍历 subview 并尝试将每个 subview 转换为 UIImageView - 如果失败,结果将被过滤掉,否则它将被放入您要从中获取第一个元素的结果数组中.

关于ios - 无法从 UITabBar 快速获取 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43448412/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com