Масштабирование пользовательского интерфейса при переходе из VIEW?

#iphone #uiview #quartz-graphics

#iPhone #пользовательский интерфейс #quartz-графика

Вопрос:

Я использую пользовательский интерфейс контейнера, чтобы воспроизвести поведение iTunes Store, когда вы нажимаете на обложку альбома, и она переворачивается и масштабируется.

Текущий код выглядит следующим образом:

 //mainView is 300x300x, smallView is 30x30      

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView transitionFromView:mainView toView:smallView duration:3.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

containerView.frame = CGRectMake(275, 415, 30, 30);

[UIView commitAnimations];  
  

Кажется, я не могу заставить содержимое containerView масштабироваться во время анимации, рамка просто закрывает содержимое. Я попытался применить некоторые преобразования как к виду, так и к слоям и к куче других вещей, но, похоже, я не могу заставить его вести себя должным образом.

Ответ №1:

Вместо установки рамки попробуйте вместо этого использовать преобразование:

 - (void)setStartTransform:(CGAffineTransform)transform;
- (void)setEndTransform:(CGAffineTransform)transform;
  

Что-то вроде

 [UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView transitionFromView:mainView toView:smallView duration:3.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

//containerView.frame = CGRectMake(275, 415, 30, 30);

[containerView setStartTransform: CGAffineTransformIdentity];
[containerView setEndTransform: CGAffineTransformMakeScale(0.1, 0.1)];

[UIView commitAnimations];  
  

(Возможно, вам также потребуется применить translate к преобразованию.)

Комментарии:

1. Пробовал сам, и хотя масштабирование работает, оно по-прежнему анимируется так, как будто кадр приближается к первому виду (изображение содержимого не масштабируется вместе со своим кадром).

2. Есть какие-нибудь другие решения для этого? Я пытаюсь то же самое и изо всех сил.

Ответ №2:

Попробуйте это таким образом:

 [UIView transitionWithView:mainView
           duration:0.2
           options:UIViewAnimationOptionTransitionFlipFromLeft
           animations:^{ 
              containerView.frame = CGRectMake(275, 415, 30, 30)
            }
           completion:NULL];