UIScrollview становится медленным после CABasicAnimations - PullRequest
1 голос
/ 11 января 2012

, как следует из названия, у меня возникли проблемы с моим UIScrollview, какие движения становятся прерывистыми после того, как я сыграю CABasicAnimation. Анимация переворачивает элементы пользовательского интерфейса на экране (до 10), а затем исчезает. Для этого я использую код ниже:

-(void)flipLayers:(UIView *)view {

    CGFloat subviewX = ((1/view.frame.size.width)*(view.frame.origin.x+200));
    CGFloat subviewY = 0.5;
    [self setAnchorPoint:CGPointMake(-subviewX, subviewY) forView:view];

    CALayer *layer = view.layer;
    layer.shouldRasterize = YES;

    CATransform3D aTransform = CATransform3DIdentity;
    CGFloat zDistance = 2000;
    aTransform.m34 = 1.0 / -zDistance;  
    scrollView.layer.sublayerTransform = aTransform;

    CATransform3D bTransform = CATransform3DIdentity;

    CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"];

    rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform];
    bTransform = CATransform3DRotate(aTransform, -M_PI_2, 0, 1, 0);;
    rotateAnim.duration=0.2;
    rotateAnim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn];
    rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform];
    layer.transform = bTransform;
    rotateAnim.removedOnCompletion = YES;
    [layer addAnimation:rotateAnim forKey:nil];

    CABasicAnimation *fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnim.duration = 0.12;
    fadeAnim.removedOnCompletion = YES;
    fadeAnim.beginTime = CACurrentMediaTime() + 0.08;
    fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
    [layer addAnimation:fadeAnim forKey:nil];

 }

Чтобы восстановить исходное положение элементов интерфейса аналогичным образом, я использую этот код

-(void)flipLayersBackwards:(UIView *)view  {

    CALayer *layer = view.layer;

    CATransform3D aTransform = CATransform3DIdentity;
    CGFloat zDistance = 2000;
    aTransform.m34 = 1.0 / -zDistance;  
    scrollView.layer.sublayerTransform = aTransform;

    CATransform3D bTransform = CATransform3DIdentity;

    CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
    rotateAnim.fromValue= [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0, 1, 0)];
    bTransform = CATransform3DRotate(aTransform, 0, 0, 1, 0);;
    rotateAnim.duration=0.2;
    rotateAnim.removedOnCompletion = YES;
    rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform];
    rotateAnim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut];
    layer.transform = bTransform;
    [layer addAnimation:rotateAnim forKey:@"rotateAnim"];

    CABasicAnimation *fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnim.duration = 0.064;
    fadeAnim.removedOnCompletion = YES;
    fadeAnim.beginTime = CACurrentMediaTime() + 0.02;
    fadeAnim.fromValue = [NSNumber numberWithFloat:0.0];
    fadeAnim.toValue = [NSNumber numberWithFloat:1.0];
    [layer addAnimation:fadeAnim forKey:nil];

    layer.shouldRasterize = NO;

}

Чем больше раз используется анимация, тем резче становится движение прокрутки. У кого-нибудь есть идея, что может быть причиной этого? Любая помощь о том, как это исправить, будет принята с благодарностью. Заранее спасибо:)

РЕДАКТИРОВАТЬ: я обнаружил, что преобразование перспективы является причиной прерывистости, но я понятия не имею, что с этим делать

...