【发布时间】:2014-08-07 18:25:00
【问题描述】:
我正在使用故事板在 iOS 中制作动画界面。我有一个名为AnimatedView 的UIView 子类,其中所有界面元素都作为其子视图。
我需要能够更改所有这些子视图的框架、变换、边界、alpha 等。事实证明这是一个问题。当我的AnimatedView 的layoutSubviews 方法被其父级调用时,它会调用一些名为_is_layout 的UIView 私有方法,这会将我所有子视图的bound 和frame 属性更改回它们使用的属性成为。
如果我以编程方式添加 UIView,这不会发生并且一切正常,但我正在与图形设计师合作,我不希望他们不得不乱写代码。
经过反复试验,我发现删除AnimatedView 上的所有自动布局约束使其无法重置frames,但它仍会重置bounds。以下是 AnimatedView 被覆盖的 layoutSubviews 方法的样子:
-(void)layoutSubviews{
[self createAnimationsFromPlist: filePath];
[self removeConstraints: self.constraints];
[super layoutSubviews];
//set everything to its initial frame
[self.animator animate:0];
}
通过消除约束,我是否走上了正确的道路?我已经阅读了auto layout guide,但我不明白为什么这会对我有所帮助。我没有在情节提要中使用 AnimatedView 的约束,但 self.constraints 出于某种原因有 20 个元素。
如果有帮助,下面是我如何为视图设置动画的示例:
- (void)animateFrame:(NSInteger)time
{
float angle = angleFrames[time];
self.view.transform = CGAffineTransformMakeRotation(angle);
}
【问题讨论】:
标签: ios uiview storyboard constraints autolayout