我一直在使用IB中的autolayout,但似乎无法得到我想要的结果,图片应该更好地说明这个问题。
当顶视图(隐藏在导航栏后面)向下动画时,绿色视图需要缩放其大小以适应顶视图(基本上缩小)。顶视图也可以向上动画,因此绿色视图需要调整大小并再次变大。
绿色视图也有一些内容,UIImage和UIlabel,UIImage需要扩展以匹配绿色视图容器,标签只需移动。
在动画对象动画后的代码中,我确实更新了布局,见下文:
// move record view
- (void)moveViews:(UIView *)iAdView持续时间:(NSTimeInterval)持续时间曲线:(int)曲线playBackwards:(BOOL)playBackwards {
// setup the animation with a block
[UIView animateWithDuration:duration
// animtations for first loop (slide off screen)
animations:^{
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDelay:0];
// the transform matrix
CGAffineTransform moveObject;
if (!playBackwards) {
// the transform down
moveObject = CGAffineTransformMakeTranslation(0, adView.frame.size.height*2);
}
else{
// the transform up
moveObject = CGAffineTransformMakeTranslation(0, -adView.frame.size.height*2);
}
// move the views
[iAdView setTransform:moveObject];
// reset for auto layout
[self.view layoutIfNeeded];
}
completion:^(BOOL finished) {
if (!playBackwards) {
NSLog(@"Anim down is complete");
}
else{
NSLog(@"Anim up is complete");
}
}];
// commit changes
[UIView commitAnimations];
}
然而,我似乎无法使这种行为起作用,中间视图根本不会缩放,它或者不移动或者所有视图都移动,即使它们被固定。
答案 0 :(得分:0)
好的没有人跳过这个,经过多次阅读,并在IDE中测试了一些东西,我终于设法让autolayout按需要运行。一般经验法则是理解每个视图都需要根据其子视图和父视图的行为进行管理。
我发现这个教程特别关注内在大小和内容拥抱/内容阻力非常有用和启发
http://www.techotopia.com/index.php/An_Introduction_to_Auto_Layout_in_iOS_6