Я реализую пользовательский интерактивный переход, управляемый процентами, для моего диспетчера пользовательских контроллеров представления, подобный 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?