UIView在Swift中的方向改变

时间:2017-03-11 04:53:20

标签: swift uiimageview

我正在开发一个显示二叉树的应用程序。

每个节点将显示为从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发生了同样的事情,所以我似乎做了一些根本错误的事情。

1 个答案:

答案 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)