Как отменить анимацию, созданную блоком анимации UIView в iOS - PullRequest
0 голосов
/ 12 апреля 2019

Я реализую пользовательский интерактивный переход, управляемый процентами, для моего диспетчера пользовательских контроллеров представления, подобный UINavigationController, но реализации отличаются. И UIPercentDrivenInteractiveTransition не помогает. В следующем коде -(void)cancel;.

существует трудность обращения анимации.
- (void)animate{
    self.view.layer=fromTransform;
    [UIView animateWithDuration:self.duration animations:^{
        self.view.layer.transform=toTransform;
    } completion:^(BOOL finished) {
        [self complete];
    }];
}
- (void)start{
    //interaction start
    self.interactive=YES;
    [self animate];
    self.view.layer.speed=0;
}
- (void)update:(double)progress{
    //interaction update
    self.view.layer.timeOffset=progress*self.duration;
}
- (void)finish{
    //interaction finish
    self.view.layer.speed=1;
    self.view.layer.beginTime=CACurrentMediaTime();
}
- (void)cancel{
    //interaction cancel
    self.cancelled=YES;
    //<????> how to reverse transition occur in'animate()' like UIPercentDrivenInteractiveTransition
    //
}
-(void)complete{
    //animation complete.
    self.interactive=NO;
    self.cancelled=NO;
}

Я пытался изменить свойство анимации:

- (void)cancel{
   [self.view.layer.animationKeys enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         CABasicAnimation *animation = [self.view.layer animationForKey:obj];
         animation.toValue=@(fromTransform);
   }]; 
}

О, крушение. Terminating app due to uncaught exception 'CAAnimationImmutable', reason: 'attempting to modify read-only animation <CABasicAnimation: 0x6000034ed560>' Итак, есть ли способ реализовать эффект, как UIPercentDrivenInteractiveTransition?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...