swift imageView.layer.origin在UIPageViewController的第一个视图控制器中无法正常工作

3phpmpom  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(126)

我有一个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
    }

字符串

9ceoxa92

9ceoxa921#

private func resetPointerView() {
        view.layoutIfNeeded()
        if let origin = origin {
            pointerView.frame.origin.x = origin.x
            pointerView.frame.origin.y = origin.y
        }
        pointerView.alpha = 1
        
    }

字符串
view.layoutIfNeeded()解决了这个问题

相关问题