Swift:当使用DispatchQueue时,UIImageView位置不会更新

时间:2018-02-07 07:11:31

标签: ios swift uiimageview grand-central-dispatch uipangesturerecognizer

根据即将推出的代码:

myButtonAction运行一个耗时的任务,我发送到后台。我有一个平移手势,处理另一组动作的交互。 transChange.center = hitPoint中的handleChangedPanGesture行按预期工作,拖动元素并将其设置到我的点位置但是当myButtonAction被激活并且用户继续与平移手势交互时, transChange的位置在屏幕上不会更新,即使其值已由hitPoint更新,它只是默认返回到“中心X”“中心Y”(静态位置),如AutoLayout中所定义。有趣的是,旋转扩展确实继续运行。一旦DispatchQueue.global().async结束,平移功能将再次按预期工作。

@IBAction func myButtonAction(_ sender: Any) {
        ...
            myButton.isEnabled = false
            DispatchQueue.global().async {
                self.addBlock(block) // This is a loop I send to the background
                DispatchQueue.main.async {
                    self.myButton.isEnabled = true
                }
            }
    }

@objc func handlePanGesture(gesture: UIPanGestureRecognizer) -> Void {
        let point = gesture.location(in: gesture.view!)
        switch gesture.state {
        case .began:
            handleBeganPanGesture(point)
        case .changed:
            handleChangedPanGesture(point)
        case .ended:
            handleEndPanGesture(point)
        default: break
        }
    }

func handleChangedPanGesture(_ hitPoint: CGPoint) {

        let myAngle = 2 * (hitPoint.x - panStartPoint.x)
        transChange.rotate(degrees: myAngle)
        transChange.center = hitPoint

        ...
    }

编辑:注意我删除了AutoLayout约束,一般问题仍然存在。 UIImageView现在锚定在左上角。同样,它通常使用平移手势更新其位置,但仅在DispatchQueue未运行后台功能时才更新。如何在Dispatch运行时强制进行布局更新?这是两个显示两个场景的图像 enter image description here enter image description here

我错过了什么?

0 个答案:

没有答案