设置IBOutletCollection中所有项目的帧值

时间:2015-04-14 10:30:25

标签: ios swift frame uiviewanimation cgrectmake

我创建了一个带有一些UIElements(Label,Button,TextField)的IBOutletCollection,我想在特殊事件中移动。

这就是我到目前为止所拥有的:

@IBAction func moveDown(sender: UIButton) {
    UIView.animateWithDuration(0.4, animations: {
            for subview in self.moveOutViews {
                var offset = CGFloat(700);
                var newY = subview.frame.origin.y + offset;
                subview.frame = CGRectMake(subview.frame.origin.x, newY, subview.frame.size.width, subview.frame.size.height);
            }
            }, completion: {
                (value: Bool) in
                UIView.commitAnimations();

        });
}

现在我的问题是,当动画完成后,我想与新位置上的UIElements(TextField)进行交互时,所有视图''回到原点位置。

maby是一个问题,'发件人'是 IBOutletCollection 的一部分?

这是适用于iOS 8.3应用的iPad,我使用的是Swift。

编辑:我使用UIScrollView进行了解决方法。但我想知道为什么第一个想法不起作用。

1 个答案:

答案 0 :(得分:0)

由于我们不知道您的视图是如何设置的,因此我必须猜测它是以下两种情况之一:

  1. 像@ Paulw11在评论中提到的那样。您正在编辑由约束保存的视图框架。当视图再次布局时,所有视图都会回溯到由约束确定的位置。事件虽然您说您没有使用约束,但可能为您的视图启用了translatesAutoresizingMaskIntoConstraints,或者您的xib / storyboard被设置为使用约束,因此会自动为您生成约束。检查此方法的一种方法是仅记录子视图的constraints属性。

  2. 您的应用中的其他地方的代码正在更改您的观看位置,并且无意中被调用。