Как анимировать zoomScale в UIScrollView

Мне нужно установить zoomScale обратно на 1 в UIScrollView, но мне нужно, чтобы он был анимирован. Я думал, что могу использовать для этого CABasicAnimation, но NSValue, похоже, не имеет «valueForFloat» или «valueForNSNumber», поэтому я не уверен, что использовать для animation.fromValue и animation.toValue для CABasicAnimation. Есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ: Что мне нужно добавить, чтобы это работало?

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"zoomScale"];
        animation.duration = 2.3;
        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];        
        animation.fromValue = [NSNumber numberWithFloat:myScrollview.zoomScale];
        animation.toValue = [NSNumber numberWithFloat:1.0];

        [myScrollview.layer addAnimation:animation forKey:@"zoomScale"];

person soleil    schedule 11.06.2013    source источник
comment
Попробуйте добавить анимацию в представление, которое анимировано, а не в scrollView, потому что я думаю, что слой прокрутки не изменился, но изменился слой увеличенного представления.   -  person danypata    schedule 12.06.2013


Ответы (1)


Вам не нужно прибегать к CAAnimation для этой простой вещи, просто используйте -[UIScrollView setZoomScale:animated:], передав YES в качестве второго параметра.

В любом случае, если вы хотите изменить какой-либо аспект анимации, вы можете вместо этого прибегнуть к «анимациям UIView», поскольку zoomScale не является свойством, которое можно непосредственно анимировать с помощью CAAnimation.

Вы пробовали что-то вроде следующего?

[UIView animateWithDuration:2.0
                      delay:0
                    options:UIViewAnimationOptionBeginFromCurrentState
                 animations:^{ [myScrollView setZoomScale:1.0f animated:NO]; }
                 completion:nil];
person yonosoytu    schedule 11.06.2013
comment
Я хочу установить собственное время анимации. Мне не нужно время анимации по умолчанию для setZoomScale:animated: - person soleil; 12.06.2013
comment
Вы должны использовать экземпляры NSNumber в качестве значений для fromValue и toValue. - person yonosoytu; 12.06.2013