是否有一种方法可以将子视图添加到Xcode,而无需重置最后添加的视图的位置?

问题描述 投票:0回答:1

这是我的代码:

let newView = ImageView()
    newView.translatesAutoresizingMaskIntoConstraints = false
    newView.backgroundColor = .random()
    view.addSubview(newView)

    newView.widthAnchor.constraint(equalToConstant: 100).isActive = true
    newView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    newView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    newView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

    let panGR = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
    panGR.delegate = self
    newView.addGestureRecognizer(panGR)

    let pinchGR = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(pinch:)))
    pinchGR.delegate = self
    newView.addGestureRecognizer(pinchGR)

    let rotateGR = UIRotationGestureRecognizer(target: self, action: #selector(handleRotate(rotate:)))
    rotateGR.delegate = self
    newView.addGestureRecognizer(rotateGR)

每次按下该按钮,它将运行此代码。但是,所有子视图都会不断重置其位置。

这是'handlePan'的代码:

@objc func handlePan(_ gestureRecognizer : UIPanGestureRecognizer){
    if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
        let translation = gestureRecognizer.translation(in: self.view)
        gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y + translation.y)

        gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)


    }
}
ios swift xcode addsubview
1个回答
0
投票

因为您在创建自定义视图时设置了约束。

将自定义视图添加到超级视图后,您可以通过拖动来更改其位置-但您只需更改center属性即可。好。

当您将新的自定义视图添加到您的超级视图时-将执行布局子视图。并且所有子视图位置将根据初始约束进行重置。

您需要:

  • 都不在子视图中使用约束
  • 无论是在handlePan(_ gestureRecognizer : UIPanGestureRecognizer)功能更改中centerXAnchor,centerYAnchor约束值,不是中心属性。因为在任何布局子视图之后,它们的位置都将设置为原始位置。
© www.soinside.com 2019 - 2024. All rights reserved.