【发布时间】:2014-10-27 13:47:25
【问题描述】:
我有一个容器视图控制器。它将另一个控制器添加为子视图控制器,并将其视图添加到视图层次结构中。
所以现在我有:
UIView *self.view //main view
UIView *childView //child view controller's view
我也有UIImageView *imageView 作为childView 的孩子。 ImageView 从左侧、右侧和顶部通过一些常量(12 个点)固定到其父级。
当我点击按钮时,我会使用以下代码滑动子视图:
- (void)swipeDown:(UISwipeGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateRecognized && !self.menuOpened) {
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
self.childView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, 120);
} completion:^(BOOL finished) {
}];
}
}
所以问题 - 就在动画开始之前,imageView 将其位置向上移动了一些。
这可以通过在动画前后将约束更改为任意数量来解决,但这是一种肮脏的技巧,因为它需要不同设备的不同值。
在 ios 8 上应该是什么样子并且实际上可以工作:
它在 iOS 7 上的样子(设置标签无关紧要,注意图像相对于导航栏的位置):
同样,在 iOS 8 上,转换工作正常,没有任何子视图被移动。在 iOS 7 上,当视图变换发生变化时,子视图会失去控制。我该如何解决?
【问题讨论】:
-
好吧,
AutoLayout不适用于CGAffineTransform。看看这个stackoverflow.com/questions/12943107/… -
@BartekChlebek Bartek 你能回答一下吗
标签: ios objective-c ios7 ios8