Используйте анимацию UIView для реализации kCATransitionPush из CATransition - PullRequest
4 голосов
/ 24 июля 2011

Apple рекомендовала использовать анимационные блоки UIView для iOS4 и новее ( здесь ), но мне очень понравился мой старый CATransition с эффектом kCATransitionPush.Как я могу реализовать kCATransitionPush с анимацией UIView?Я вижу только четыре типа перехода вида в доступных опциях (перевернуть влево / вправо, свернуть вверх / вниз)

Если я сам реализую, я планирую создать новый вид и вставить его, сдвигаястарый вид.Я не понимаю, почему яблоко не включает эффект «толчка» в анимации UIView.

Спасибо!

Лев

Ответы [ 4 ]

4 голосов
/ 24 июля 2011

После прочтения опубликованных вами яблочных документов также появляется сообщение:

Методы блочной анимации (такие как animateWithDuration: анимации :) значительно упрощают создание анимации. Одним вызовом метода вы указываете анимацию, которая будет исполнены и варианты анимации. Тем не менее, на основе блоков анимации доступны только в iOS 4 и более поздних версиях. Если ваше приложение работает на более ранних версиях iOS, вы должны использовать Методы класса beginAnimations: context: и commitAnimations для отметки начало и конец вашей анимации.

Я понимаю, что они рекомендуют его , потому что значительно упрощает создание анимации. Он также отмечает, что он не будет работать с любыми устройствами, не имеющими ios 4. Если вы знаете, как использовать CAAnimation, я бы продолжал его использовать. Я до сих пор использую это без каких-либо проблем:

- (void)switchTwoViews:(UIView *)view1 otherView:(UIView *)view2 direction:(int)directionRL{
view2.frame = CGRectMake(0, 0, 400, 211);
visibleView = view2;
// remove the current view and replace with view1
[view1 removeFromSuperview];
[currentOptionsView addSubview:view2];

// set up an animation for the transition between the views
CATransition *animation = [CATransition animation];
[animation setDuration:0.3];
[animation setType:kCATransitionPush];
if (directionRL == 0) {
    [animation setSubtype:kCATransitionFromRight];
} else {
    [animation setSubtype:kCATransitionFromLeft];
}

[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

[[currentOptionsView layer] addAnimation:animation forKey:@"SwitchToView"];

}

2 голосов
/ 25 июля 2011

Документация ссылается на рекомендацию анимации UIView на основе блоков, используя более старые вызовы UIView beginAnimations и commitAnimations.Это не имеет ничего общего с CATransition.Вы можете продолжать использовать Core Animation без каких-либо забот.

1 голос
/ 20 октября 2016

Здесь функция Swift, которая анимирует вид слева / справа в соответствии с заданным флагом:

func animateSwipe(on view: UIView, left: Bool) {
    let transition = CATransition()
    transition.duration = 0.45
    transition.type = kCATransitionPush
    transition.subtype = left ? kCATransitionFromLeft : kCATransitionFromRight
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
    view.layer.add(transition, forKey: nil)
    // change anything you want on the view in a reload(view: UIView) function
    reload(view)
}
0 голосов
/ 16 мая 2012

Попробуйте ниже код для отображения представления

-(void)slideViewTransition:(UIView*)slidingView
{ 
  CATransition *animation = [CATransition animation];
 [animation setDuration:0.4];
 [animation setType:kCATransitionPush];
 [animation setSubtype:kCATransitionFromTop];
 [animation setTimingFunction:[CAMediaTimingFunction  functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

 [[slidingView layer] addAnimation:animation forKey:nil];

}

Когда вам нужно скрыть представление, просто измените [animation setSubtype:kCATransitionFromTop] на [animation setSubtype: kCATransitionFromBottom];

Я надеюсь, что это может помочь вам .. !!!!

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