animator.startAnimation-此警告是什么意思?

时间:2018-12-14 22:53:42

标签: ios objective-c animation uiviewpropertyanimator

我正在尝试学习如何在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;”上有警告表示“未使用属性访问结果-吸气剂不应用于副作用”。这指的是什么属性访问结果?我该怎么写,以免收到警告?

1 个答案:

答案 0 :(得分:2)

startAnimation是一种方法,而不是属性。您应该写:

[animator startAnimation];

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

只需避免使用错误的语法,就可以避免出现此问题。

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

UIViewPropertyAnimator *animator;

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

@implementation YourClass {
    UIViewPropertyAnimator *animator; //instance variable
}

// your methods

@end