animator.startAnimation - Что означает это предупреждение?
Я пытаюсь узнать, как использовать 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 ответ
startAnimation
это метод, а не свойство. Вы должны написать:
[animator startAnimation];
Хотя Objective-C позволяет вам использовать синтаксис свойства при вызове метода, который не принимает параметров, ваше использование записано так, как будто вы пытаетесь прочитать значение свойства. Но поскольку (очевидно) вы не пытаетесь сохранить результат (его нет), компилятор жалуется, что вы игнорируете доступное значение.
Просто избегайте неправильного синтаксиса, и вы избегаете проблемы.
Кстати, вы утверждаете, что линия:
UIViewPropertyAnimator *animator;
находится за пределами @implementation
/ @end
пара. Это делает его глобальной переменной файла. Это то, что вы действительно хотите? Если вы хотите, чтобы это была переменная экземпляра класса (что, вероятно, то, что вы действительно хотите), это должно быть:
@implementation YourClass {
UIViewPropertyAnimator *animator; //instance variable
}
// your methods
@end