Objective-C - 只读变量不可赋值?

9

我一直在使用以下代码来移动视图,从未出现过问题。我第一次在项目中使用ARC,第二行代码出现了以下错误:“只读变量不可分配”。

我应该如何在ARC中进行操作?

CGRect rect = self.frame;

[UIView animateWithDuration:0.4 animations:^{
    rect.origin.x = 57;
    self.frame = rect;
}];

代码是完全合法的。你不应该遇到错误。你有没有忘记其他可能导致这个问题的东西? - He Shiming
1个回答

24
问题在于我在动画块中使用了CGRect。将变量标记为__block解决了我的问题。
__block CGRect rect = self.frame;

1
你也可以将CGRect变量放在块内部,因为你只是用它来修改“self”的框架。这会使代码更易于阅读。 - ikuramedia
取决于...如果动画开始后self的frame发生变化,则执行@ikuragames建议的操作会改变代码的行为。araxt建议的与OP一开始所写的行为完全相同。 - bbum
我没有将它放在代码块中,因为它也在我的代码块外被使用。 - aryaxt
1
@bbum 你必须记住,动画要等到下一次运行循环才会发生。此外,OP已经将self.frame复制到了一个本地CGRect中,因此修改self.frame对动画块的含义没有影响。 - ikuramedia
太棒了...回答...在一分钟内解决了我的问题。 - Jagat Dave
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接