我有一个UIPageController来控制我的视图控制器(一个自定义类型TipViewController的数组)。
在TipViewController上,有一个名为pointerView的UIImageView。它的位置被调整到一个自定义位置(使用layer.origin属性)。
第一个视图控制器永远不会正确更新imageView的原点,因为pointerView.frame.origin始终为0,0,即使在viewDidAppear()上也是如此。返回到第一个页面会随机向上移动pointerView,并且打印pointerView.frame.origin显示它与它的视觉外观完全不同步。
其余页面显示正确。我很困惑为什么第一页没有工作?这和UIPageController有关系吗?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if origin == nil {
print("Setting up origin for : \(data.name)")
origin = CGPoint(x: pointerView.frame.origin.x, y: pointerView.frame.origin.y)
origin?.x += data.pointerLocation.x
origin?.y += data.pointerLocation.y
}
resetPointerView()
}
private func resetPointerView() {
if let origin = origin {
pointerView.frame.origin.x = origin.x
pointerView.frame.origin.y = origin.y
}
pointerView.alpha = 1
}
override func viewWillDisappear(_ animated: Bool) {
print(" viewWillDisappear \(data.header)")
super.viewWillDisappear(animated)
resetPointerView()
pointerView.layer.removeAllAnimations()
pointerView.alpha = 0
}
字符串
1条答案
按热度按时间9ceoxa921#
字符串
view.layoutIfNeeded()解决了这个问题