最近,我使用UIDynamics将图像视图动画化。然而,由于它的自动退出y-pos约束设置为非屏幕,当从屏幕上导航然后返回到屏幕时,我的图像视图再次被放到屏幕外。动画花费了大约3秒,所以在3秒后,我只是重置约束。感觉有点烦躁。
所以我的问题是:同时处理autolayout和UIDynamics的正确方法是什么?
发布于 2014-03-20 17:17:23
这其实不是一个动态问题。Autolayout与任何视图动画或框架的任何手动设置都不兼容:当布局出现时,将遵循这些约束。如果您以任何方式手动移动视图,则由您来更新约束以匹配其新的位置/大小/其他。
尽管如此:对于UIKit Dynamic,当动画结束时,动画师将暂停,并通知动画师的委托:
ref/occ/intfm/UIDynamicAnimatorDelegate/dynamicAnimatorDidPause
所以现在是更新约束的时候了。
发布于 2014-08-08 11:24:29
Geppy在本教程中提供了一个很好的解决方案。
基本上,您可以创建符合UIDynamicItem的对象:
@interface DynamicHub : NSObject <UIDynamicItem>
@property(nonatomic, readonly) CGRect bounds;
@property(nonatomic, readwrite) CGPoint center;
@property(nonatomic, readwrite) CGAffineTransform transform;
@end它需要嵌入边界,否则就会崩溃:
- (id)init {
self = [super init];
if (self) {
_bounds = CGRectMake(0, 0, 100, 100);
}
return self;
}然后对该对象使用UIDynamics,并使用中间值更新约束:
DynamicHub *dynamicHub = [[DynamicHub alloc] init];
UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:dynamicHub
snapToPoint:CGPointMake(50.0, 150.0)];
[snapBehavior setDamping:.1];
snapBehavior.action = ^{
self.firstConstraint.constant = [dynamicHub center].y;
self.secondConstraint.constant = [dynamicHub center].x;
};
[self.animator addBehavior:snapBehavior];https://stackoverflow.com/questions/22540388
复制相似问题