animator.startAnimation -- 这个警告是啥意思?

Posted

技术标签:

【中文标题】animator.startAnimation -- 这个警告是啥意思?【英文标题】:animator.startAnimation -- What does this warning mean?animator.startAnimation -- 这个警告是什么意思? 【发布时间】:2018-12-14 22:53:42 【问题描述】:

我正在尝试学习如何在 objc 中使用 UIViewPropertyAnimator。我用一个名为“blueBox”的对象制作了一个简单的测试应用程序。我想改变 blueBox 的属性。

我在@implementation 之外声明“动画师”...@end:

UIViewPropertyAnimator *animator;

然后像这样定义它:

- (void)viewDidLoad 
   [super viewDidLoad];
   CGRect newFrame = CGRectMake(150.0, 350.0, 100.0, 150.0);
   animator = [[UIViewPropertyAnimator alloc]
               initWithDuration:2.0
               curve:UIViewAnimationCurveLinear
               animations:^(void)
      self.blueBox.frame = newFrame;
      self.blueBox.backgroundColor = [UIColor redColor];
   ];

当我想使用它时,我会写:

animator.startAnimation;

它按预期工作(更改对象的颜色和框架),但在 'animator.startAnimation;' 上有警告上面写着“未使用的属性访问结果 - getter 不应该用于副作用”。那指的是什么属性访问结果?我应该怎么写才不会收到警告?

【问题讨论】:

【参考方案1】:

startAnimation 是一个方法,而不是一个属性。你应该写:

[animator startAnimation];

虽然 Objective-C 确实允许您在调用不带参数的方法时使用属性语法,但您的用法就像您尝试读取属性值一样编写。但是由于(显然)您没有尝试存储结果(没有结果),编译器会抱怨您忽略了访问的值。

只要避免错误的语法,就可以避免问题。

顺便说一句,您声称该行:

UIViewPropertyAnimator *animator;

@implementation / @end 对之外。这使它成为一个文件全局变量。那是你真正想要的吗?如果你希望它成为类的实例变量(这可能是你真正想要的),它应该是:

@implementation YourClass 
    UIViewPropertyAnimator *animator; //instance variable


// your methods

@end

【讨论】:

以上是关于animator.startAnimation -- 这个警告是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章