Я пытаюсь анимировать анимацию дрожания на кнопке, она работает, если только я последовательно нажимаю на одну и ту же кнопку. Например, кнопка A, сценарий, который она анимирует и не выполняет:
- Нажмите A (не анимировать), нажмите A (анимировать), нажмите A (анимировать), нажмите A (анимировать) ) и т. д. ...
- Нажмите A (не анимировать), нажмите B (не анимируйте), нажмите A (не анимируйте), нажмите B (не анимируйте), Нажмите A (не анимировать), нажмите A (анимировать) ...
Это код:
-(void)shakeButton:(UIButton *)sender{
CABasicAnimation *shake = [CABasicAnimation animationWithKeyPath:@"position"];
[shake setDuration:0.1];
[shake setRepeatCount:2];
[shake setAutoreverses:YES];
[shake setFromValue:[NSValue valueWithCGPoint:
CGPointMake(sender.center.x - 5,sender.center.y)]];
[shake setToValue:[NSValue valueWithCGPoint:
CGPointMake(sender.center.x + 5, sender.center.y)]];
[sender.layer removeAllAnimations];
[sender.layer addAnimation:shake forKey:@"position"];
}
Кнопка находится в многократно используемой ячейке UICollectionView:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"mycellid" forIndexPath:indexPath];
//some code
[cell.btn addTarget:self action:shakeButton: forControlEvents:UIControlEventTouchUpInside];
//some code
return cell;
}
Интересно, почему это так?