当转到另一个视图时,UIimages移动到中心

pai*_*247 2 uiimage drag autolayout

我有一个拖放类应用程序.您可以在哪里选择图像并将其拖动到屏幕上的任何位置!我遇到的问题是,当你移动到另一个视图时,当我返回时,所有图像都重置到中心.例如,如果我按下按钮将我带到屏幕2,我刚刚做的所有"拖动"图像将移回中心.

这只有在我启用了AUTOLAYOUT时才会发生:(我的所有图像都是从中心开始的,所以我猜它的自动布局......

有任何想法吗 ?!

这是我的拖动图像代码的示例.

 - (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                     recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}
Run Code Online (Sandbox Code Playgroud)

alg*_*gal 6

您的拖放代码是通过改变view.center属性手动配置布局.

启用自动布局后,自动布局负责设置布局,因此它负责设置view.center,view.bounds和view.frame(实际上只是从中心和边界计算).

因此,一旦启用了自动布局,虽然您仍然可以手动设置view.center,但是下次计算满足您所具有的约束的布局时,自动布局将破坏您所做的任何操作.

那么如何更新代码以使用自动布局?如果你想使用自动布局,你需要做的是修改你的handlePan:方法,这样它不会修改view.center,而是修改用于计算view.center的自动布局约束.具体细节取决于您的约束配置.但是,如果我们假设有一个NSLayoutContraint topSpaceConstraint将视图的顶部空间设置为superview,另一个NSLayoutConstraint leftSpaceConstraint将视图的左侧空间设置为superview,那么你可以产生与

view.center = CGPointMake(view.center.x + translation.x,
                          view.center.y+ translation.y);
Run Code Online (Sandbox Code Playgroud)

通过改为做类似的事情

topSpaceConstraint.constant = topSpaceConstraint.constant + translation.y;
leftSpaceConstraint.constant = leftSpaceConstraint.consant + translation.x;
[view setNeedsLayout];
[view layoutIfNeeded];
Run Code Online (Sandbox Code Playgroud)

前两行更新约束.最后两行导致自动布局系统重新计算生成的帧并立即应用它,而不是等到运行循环的下一轮.

或者,当您获得UIGestureRecognizerChanged事件时,您可以手动更新帧,然后只有在获得UIGestureRecognizerEnded事件后才通过更新上面所示的约束使结果"永久".这将是更高性能,因为在许多UIGestureRecognizerChanged事件期间,您将直接更新帧而不是依靠自动布局系统来执行此操作.