我有一个看起来非常好的动画方案(使用UIView animateWithDuration
动画帧属性),直到升级到Xcode 6或iOS 8(或两者)改变了一切。我怀疑问题的一部分是我很少关注AutoLayout,因为该应用只支持纵向视图。
一张图片胜过千言万语,一段视频价值一百万,因此可以在以下youtube上传中看到动画变化的截屏示例:
The first example(iOS 7)以图形方式显示我正在尝试实现的内容,the second显示切换到Xcode 6 / iOS 8后发生的情况。请查看是否要回复:< / p>
这是我当前的(简化)代码,它位于快速枚举循环内,迭代FRC的fetchedResults:
[UIView animateWithDuration:.8
delay:0.0
options: UIViewAnimationOptionCurveEaseInOut
animations:^
{
// Starting state *************************************
thisBar.frame = CGRectMake(20, self.scroller.contentSize.height, 130, 0);
thisBar.backgroundColor = [UIColor blackColor];
thisInfoLabel.frame = CGRectMake(20, self.scroller.contentSize.height, thisBar.frame.size.width, 30);
thisTimeLabel.frame = CGRectMake((thisBar.frame.origin.x) + (thisBar.frame.size.width + 35), self.scroller.contentSize.height, 150, 15);
thisTimeLabel.textColor = [UIColor blueColor];
arrowView.frame = CGRectMake(thisTimeLabel.frame.origin.x - 20, thisTimeLabel.frame.origin.y, 16, 16);
thisInfoLabel.textColor = [UIColor clearColor];
// End state *************************************
thisBar.frame = CGRectMake(20, barY, 130, - barHeight);
thisBar.backgroundColor = thisBar.endColor;
thisBar.layer.shadowColor = [[UIColor blackColor] CGColor];
thisBar.layer.frame = CGRectInset(thisBar.layer.frame, 0.0, 3.0);
thisBar.layer.shadowOpacity = 0.7;
thisBar.layer.shadowRadius = 4.0;
thisBar.layer.shadowOffset = CGSizeMake(5.0f, 5.0f);
...
}
我已经阅读了这种变化的各种可能原因,但细节似乎没有实际意义,显然解决问题的唯一正确方法是从我的视图的框架属性设置动画并改为开始制作动画约束。 / p>
好的,我接受了。然而,由于我已经看了很多关于这个主题的SO帖子以获得指导,大多数似乎都是针对IB生成的观点。我的观点是生成的代码,任何数字和任何高度,两者都是在代码中动态确定的。为了增加戏剧性,这些观点位于UIScrollView
。
此时,似乎我的策略应该是(每个视图):
1)创建视图
2)为每个视图设置约束
3)按顺序为每个视图设置约束
有人对有用的教程有什么建议或指示吗?一个简单的例子将几个代码生成的视图相互关联,特别是在UIScrollView
内部,这将是一个天赐之物。
非常感谢!