我有一个容器视图控制器。它添加了另一个控制器作为子视图控制器,以及它查看层次结构的视图。
所以现在我有:
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上,子视图在视图变换发生变化时失去控制。我该如何解决这个问题?
答案 0 :(得分:1)
好吧,AutoLayout不适用于CGAffineTransform。看看这个How do I adjust the anchor point of a CALayer, when Auto Layout is being used?