以下是有关它的视频:
基本上,如果我在平移时更改UIImageView(X)的图像属性,它会将视图中的所有控件恢复到原始的未打开位置。 (它们都嵌入在UIView中,所以我可以“平移单元格”,而UIImageViews在视图之外并且是独立的。)
如果我不更改图像:
为了记录,我在用户平均一定数量时更改图像,我相信80分。
以下是代码:
// Only allow the cell to be moved 100 pixels left or right
if (xPos <= 100 && xPos >= -100) {
// Move our cell to the xPos we defined
CGRect slidingViewFrame = self.slidingView.frame;
slidingViewFrame.origin = CGPointMake(xPos - 100, 0);
self.slidingView.frame = slidingViewFrame;
if (xPos >= 80) {
if (_removeIconIsActive == NO) {
// Change remove icon to a red, active state and animate the change
self.removeIconImageView.image = [UIImage imageNamed:@"remove-icon-active.png"];
_removeIconIsActive = YES;
}
CGRect removeIconFrame = self.removeIconImageView.frame;
removeIconFrame.origin = CGPointMake(40, 35);
self.removeIconImageView.frame = removeIconFrame;
}
}
视图在故事板中设置,但移动和操作都是在代码中完成的。
这是故事板布局:
这是处理细胞平移的完整方法:https://gist.github.com/anonymous/c51c7cb2997c89094f08
答案 0 :(得分:6)
如果您使用自动布局,则根本不应修改框架属性。框架是应用布局约束的结果,而不是“写入”属性。
我想你会有一个约束来设置你的视图的x位置。为该约束创建IBOutlet
,而不是修改frame
,修改约束的constant
属性。然后拨打该视图的layoutIfNeeded
。
如果没有详细了解您的观点,约束和出口,我无法给您最终的代码,但您会以这样的结尾:
self.leftConstraint.constant = xPos - 100.f;
[self.slidingView setNeedsUpdateConstraints];
[self.slidingView layoutIfNeeded];
我对正在发生的事情的解释是,设置图像会改变图像视图的固有大小,这会使约束重新计算,将所有内容都回到起始位置。只要您滑动另一个像素,您就会再次启动,frame
属性再次获胜。
希望它有所帮助。