【发布时间】:2015-04-14 10:30:25
【问题描述】:
我创建了一个带有一些 UIElements(标签、按钮、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) 进行交互,所有视图都“跳转”回到原始位置。
'sender' 可能是 IBOutletCollection 的一部分的问题?
这是适用于 iOS 8.3 的 iPad 应用程序,我正在使用 Swift。
编辑:我用 UIScrollView 做了一个解决方法。但我想知道为什么第一个想法不起作用。
【问题讨论】:
-
问题可能是您有设置项目位置的约束,一旦重新应用这些约束,您对框架的手动更改就会被覆盖。如果您为第一个项目的 Y 位置约束设置一个 IBOutlet,然后将所有其他项目的 Y 位置设置为与第一个对象对齐,那么您需要做的就是修改约束 IBOutlet 的常量并调用 setNeedsLayout
-
我没有限制。我已经尝试过你的想法,但仍然是同样的问题。
-
你为什么在完成块中调用
UIView.commitAnimations()?对于基于块的动画,该调用是不必要的 -
哦,我不知道。
标签: ios swift frame uiviewanimation cgrectmake