#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];