ios - 我目前在自动布局中更新 UIVIew 的约束时遇到问题
问题描述
我创建了一个自定义视图,其中添加了子视图,并且每个 UIView 对象都添加了一个 UIPanGestureRecognizer,但是当我在更新约束后选择 UIView 时会出现延迟。如果我将 UIView (sView) 拖出屏幕,下次我将视图拖到任一方向时,在平移手势识别器注册之前会有几秒钟的延迟。它不会立即注册平移手势。
我已经阅读了自动布局,并相信它在动画回调方法中配置正确。我在视图控制器中创建了一个可以访问更新约束的委托,并且 sView.leftConstraint 和 sView.rightConstraint 是我添加到表示可拖动 UIView 的自定义视图中的字段。
ScrollViewController 采用了一个协议,以便它可以访问被选择的视图并相应地更新约束。
任何帮助将不胜感激 :)
extension ScrollViewController: DragDelegate {
func draggedLeft(sView: DraggableView) {
print("Dragged Left")
confirmationLabel.text = ""
sView.selectionLabel.text = "Not Selected"
sView.cornerRadius = 7
sView.rightConstraint?.isActive = false
sView.leftConstraint?.isActive = false
sView.leftConstraint?.constant = 1
sView.leftConstraint?.isActive = true
// sView.widthConstraint?.constant = 300
UIView.animate(withDuration: 0.3) {
sView.updateConstraints()
self.contentView.setNeedsLayout()
self.view.layoutIfNeeded()
}
}
}
class OrderSelectionView: UIView {
var dView : DraggableView?
var dView2 : DraggableView?
let screenWidth = UIScreen.main.bounds.width
//I need to set up all the constraints in this class
//This will act almost like a container view
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)
let margins = self.layoutMarginsGuide
self.translatesAutoresizingMaskIntoConstraints = false
dView = DraggableView(frame: frame)
dView2 = DraggableView(frame: frame)
guard let dragView = dView else {return}
guard let dragView2 = dView2 else {return}
dragView.translatesAutoresizingMaskIntoConstraints = false
dragView.topAnchor.constraint(equalTo: laundryLabel.bottomAnchor, constant: 10).isActive = true
let rightAnchor = NSLayoutConstraint(item: dragView, attribute: .right, relatedBy: .equal, toItem: self, attribute: .right, multiplier: 1, constant: 0)
let leftAnchor = NSLayoutConstraint(item: dragView, attribute: .left, relatedBy: .equal, toItem: self, attribute: .left, multiplier: 1, constant: 0)
dragView.widthAnchor.constraint(equalToConstant: 150).isActive = true
dragView.heightAnchor.constraint(equalToConstant: 40).isActive = true
dragView.leftConstraint = leftAnchor
dragView.leftConstraint?.isActive = true
dragView.rightConstraint = rightAnchor
self.addSubview(dragView2)
dragView2.translatesAutoresizingMaskIntoConstraints = false
let laundryLabel2 = createLaundryLabel(lTitle: "Dry", constant: 100)
dragView2.translatesAutoresizingMaskIntoConstraints = false
dragView2.topAnchor.constraint(equalTo: laundryLabel2.bottomAnchor, constant: 10).isActive = true
let rightAnchor2 = NSLayoutConstraint(item: dragView2, attribute: .right, relatedBy: .equal, toItem: self, attribute: .right, multiplier: 1, constant: -50)
let leftAnchor2 = NSLayoutConstraint(item: dragView2, attribute: .left, relatedBy: .equal, toItem: self, attribute: .left, multiplier: 1, constant: 0)
dragView2.widthAnchor.constraint(equalToConstant: 150).isActive = true
dragView2.heightAnchor.constraint(equalToConstant: 40).isActive = true
dragView2.leftConstraint = leftAnchor2
dragView2.leftConstraint?.isActive = true
dragView2.rightConstraint = rightAnchor2
}
解决方案
推荐阅读
- css - 在 ionic 5 中,Scss 文件未编译为 css 文件
- python - pandas: assign value based on equivalent value in another row with lookup
- python - PyVISA 和 PyMeasure 的问题 - 如何解决?
- react-native - 如何在 React Native 中自动缩放图像?
- r - 如何将我的特定位置分配给他们的社区?
- python - col - Python中唯一标签的绘图线
- sql-server - 可以创建用户但不能更改它?
- sql - 如何在 Golang 中缓存到不同 Postgres/MySQL 数据库的连接?
- excel - VBA VLOOKUP,而不是'book1',作为字符串
- python - Python 在同级目录中使用 __init__.py 导入