Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UIView在Swift中的方向更改_Swift_Uiimageview - Fatal编程技术网

UIView在Swift中的方向更改

UIView在Swift中的方向更改,swift,uiimageview,Swift,Uiimageview,我正在开发一个显示二叉树的应用程序 每个节点将显示为从ViewController编程生成的子视图-我从viewDidLayoutSubviews()运行以下命令 问题在于,在方向更改时,视图会相互重复(上面有三个节点,在方向更改时可能会显示4) 我查看了堆栈,并在子类UIView中添加了: self.contentMode = UIViewContentMode.redraw 在Programmatic子视图中,但同样的情况也会发生 别担心-我稍后将在循环中生成节点(我试图了解布局是如何工作

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

每个节点将显示为从ViewController编程生成的子视图-我从viewDidLayoutSubviews()运行以下命令

问题在于,在方向更改时,视图会相互重复(上面有三个节点,在方向更改时可能会显示4)

我查看了堆栈,并在子类UIView中添加了:

self.contentMode = UIViewContentMode.redraw
在Programmatic子视图中,但同样的情况也会发生

别担心-我稍后将在循环中生成节点(我试图了解布局是如何工作的)。顺便说一句,我发现使用UICollectionView时也发生了同样的情况,因此我似乎在做一些根本错误的事情。

将“目标:”更改为控制器(改为自身)对于这三种情况,控制器将响应手势,而不是视图本身。在这三种情况下,目标都是相同的

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)

谢谢-但手势效果很好。问题是方向改变和对象不能正常再生。你说你在方向改变时得到了额外的对象。那是因为你通过链接目标来链接识别器。你是否尝试将目标全部替换为self?行为改变了吗?如果我做出更改为self,然后单击一个对象,我发现一个崩溃。无法识别的选择器被发送到实例。这是因为您的选择器格式不正确。删除“(识别器:)”我假设您使用的是swift 3。仍然相同(它是不同的选择器):view.addgestureRecognitizer(uitagestureRecognitizer)(目标:self,操作:#选择器(BinaryTreeView.returnHead)))
 secondView.addGestureRecognizer(UIPinchGestureRecognizer(target:self, action:#selector(BinaryTreeView.changeScale)))
    self.view.addSubview(secondView)