首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIDynamics和Autolayout

UIDynamics和Autolayout
EN

Stack Overflow用户
提问于 2014-03-20 17:12:37
回答 2查看 3.7K关注 0票数 4

最近,我使用UIDynamics将图像视图动画化。然而,由于它的自动退出y-pos约束设置为非屏幕,当从屏幕上导航然后返回到屏幕时,我的图像视图再次被放到屏幕外。动画花费了大约3秒,所以在3秒后,我只是重置约束。感觉有点烦躁。

所以我的问题是:同时处理autolayout和UIDynamics的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-20 17:17:23

这其实不是一个动态问题。Autolayout与任何视图动画或框架的任何手动设置都不兼容:当布局出现时,将遵循这些约束。如果您以任何方式手动移动视图,则由您来更新约束以匹配其新的位置/大小/其他。

尽管如此:对于UIKit Dynamic,当动画结束时,动画师将暂停,并通知动画师的委托:

ref/occ/intfm/UIDynamicAnimatorDelegate/dynamicAnimatorDidPause

所以现在是更新约束的时候了。

票数 5
EN

Stack Overflow用户

发布于 2014-08-08 11:24:29

Geppy在本教程中提供了一个很好的解决方案。

基本上,您可以创建符合UIDynamicItem的对象:

代码语言:javascript
复制
@interface DynamicHub : NSObject <UIDynamicItem>
    @property(nonatomic, readonly) CGRect bounds;
    @property(nonatomic, readwrite) CGPoint center;
    @property(nonatomic, readwrite) CGAffineTransform transform;
@end

它需要嵌入边界,否则就会崩溃:

代码语言:javascript
复制
- (id)init {
    self = [super init];
    if (self) {
        _bounds = CGRectMake(0, 0, 100, 100);
    }
    return self;
}

然后对该对象使用UIDynamics,并使用中间值更新约束:

代码语言:javascript
复制
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];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22540388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档