iOS UIDynamicAnimator实例对象为什么不作为property出现的时候不好使??

发布于 2022-09-01 18:46:28 字数 972 浏览 16 评论 0

- (void)shake
{
    if (!self.animator) {
        self.animator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
    }
    
    [self.animator removeAllBehaviors];
    
    CGPoint newPos = CGPointMake(arc4random()%320, arc4random()%568);
    UISnapBehavior *snap = [[UISnapBehavior alloc]initWithItem:_btn snapToPoint: newPos];
    snap.damping = 0.3;
    [self.animator addBehavior:snap];
    
//    UIDynamicAnimator *animator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
//    
//    [animator removeAllBehaviors];
//    
//    CGPoint newPos = CGPointMake(arc4random()%320, arc4random()%568);
//    UISnapBehavior *snap = [[UISnapBehavior alloc]initWithItem:_btn snapToPoint: newPos];
//    snap.damping = 0.3;
//    [animator addBehavior:snap];
}

注释部分的代码是不作为property出现的,上下两段代码除了一个是property一个不是其它的都一毛一样,为什么只有当animator作为property的时候这个add进去的snap动画才生效呢??看了官方文档也没找到这方面的解释,而且之前忘记是用什么其它的东西也是遇到了这种情况。跪求大神给解释一下ORZ

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乞讨 2022-09-08 18:46:28

嗯…… 我觉得恐怕是这个animator不会retain自身,所以如果没有人持有它,在这个函数末尾,animator这个对象就自动释放了。如果作为 property,会持有这个对象,就不会释放了。

可以试试把 property 改成 weak 的,估计还会是不生效。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文