我正在开发一个显示二叉树的应用程序。
每个节点将显示为从ViewController以编程方式生成的子视图 - 我从viewDidLayoutSubviews()运行以下命令。
let theView = BinaryTreeView(frame: CGRect(x: 0, y: 50, width: width, height: 100))
// let theView = BinaryTreeView(s: "I'm testing")
theView.backgroundColor = .white
theView.addGestureRecognizer(UIPinchGestureRecognizer(target:theView, action:#selector(BinaryTreeView.changeScale(recognizer:))))
self.view.addSubview(theView)
theView.eyesOpen = false
let secondView = BinaryTreeView(frame: CGRect(x: width/2, y: 150, width: width/2, height: 100))
// let theView = BinaryTreeView(s: "I'm testing")
secondView.backgroundColor = .white
secondView.addGestureRecognizer(UIPinchGestureRecognizer(target:secondView, action:#selector(BinaryTreeView.changeScale(recognizer:))))
self.view.addSubview(secondView)
let thirdView = BinaryTreeView(frame: CGRect(x: (width/2)+width/4, y: 250, width: width/4, height: 100))
// let theView = BinaryTreeView(s: "I'm testing")
thirdView.backgroundColor = .white
thirdView.addGestureRecognizer(UIPinchGestureRecognizer(target:thirdView, action:#selector(BinaryTreeView.changeScale(recognizer:))))
self.view.addSubview(thirdView)
问题是,在方向更改时,视图会相互重复(上面有三个节点,可能会显示方向更改4。
我查看了Stack并在我的子类UIView中添加了:
self.contentMode = UIViewContentMode.redraw
在程序化的子视图中,但同样的情况也会发生。
别担心 - 我将在稍后的循环中生成我的节点(我正在尝试理解布局是如何工作的)。顺便说一句,我发现使用UICollectionView发生了同样的事情,所以我似乎做了一些根本错误的事情。
答案 0 :(得分:1)
将“target:”更改为所有三个控制器(自己)。您的控制器将响应手势,而不是视图本身。在所有三种情况下,目标都是相同的。
secondView.addGestureRecognizer(UIPinchGestureRecognizer(target:secondView, action:#selector(BinaryTreeView.changeScale)))
self.view.addSubview(secondView)
变为
secondView.addGestureRecognizer(UIPinchGestureRecognizer(target:self, action:#selector(BinaryTreeView.changeScale)))
self.view.addSubview(secondView)