Вращение UIImageView вокруг нижней оси - Objective-C / iOS - PullRequest
1 голос
/ 23 сентября 2011

У меня есть представление UIImage, которое я хочу перевернуть, чтобы быть плоским, как это делают часы с переворотом. Это первая часть горизонтальной плоскости (где я буду менять изображение или добавлять новый вид или что-то в этом роде). Моя проблема состоит в том, чтобы заставить представление перевернуться на нижней оси. это квадрат 100px. Как мне заставить его вращаться по нижней оси. Я прочитал много проблем и ответов по стеку, погуглил их и все, что у меня есть, не работает. Это самое близкое, что у меня есть, которое, кажется, переворачивается при перемещении вида, прежде чем оно это делает, и я не могу заставить его перевернуться, но остаюсь на месте.

Глядя на раздел «Применение анимации» http://www.voyce.com/index.php/2010/04/10/creating-an-ipad-flip-clock-with-core-animation/, может показаться, что у меня правильная ось, а у меня явно нет!

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

boxView.center = CGPointMake(0.5, 1);

boxViewImage.layer.anchorPoint = CGPointMake(0.5, 1);
boxViewImage.layer.transform = CATransform3DMakeRotation(M_PI_2,-1.0,0,0); 

[UIView commitAnimations];

boxViewImage - это UIImageView

Что мне нужно добавить, чтобы правильно перевернуть? Пытаюсь сделать это уже 2 дня!

EDIT:

Я выделил UIImageView следующим образом:

CGRect frameRect = CGRectMake(0, 0, 100,100);
boxViewImage = [[UIImageView alloc] initWithFrame:frameRect];
boxViewImage.image =  [UIImage imageNamed:@"1.png"];
[self.view addSubview:boxViewImage];

РЕДАКТИРОВАТЬ 2:

Я обнаружил, что если я создаю свой UIImageView, когда я щелкаю (а не то, что я хочу сделать) после загрузки представления, оно вращается так, как мне нужно. Я думаю, что это может быть связано с тем, что UINavigationController имеет высоту, так как смещение кажется таким же, как и его высота!

Ответы [ 2 ]

5 голосов
/ 24 сентября 2011

В вашем коде есть несколько ошибок.

Во-первых, я понятия не имею, почему вы устанавливаете boxView.center в (0.5, 1). Во-вторых, вы не должны устанавливать точку привязки внутри блока анимации, а третий M_PI_2 - это только половина анимации, которую вы действительно хотите.

Вот решение. Я использовал UILabel вместо UIImageView.

UILabel *testLabel = [[[UILabel alloc] initWithFrame:CGRectMake(20, 20, 100, 100)] autorelease];
testLabel.backgroundColor = [UIColor blackColor];
testLabel.text = @"Test";
testLabel.textColor = [UIColor whiteColor];
[self.view addSubview:testLabel];
testLabel.layer.anchorPoint = CGPointMake(0.5, 1);    

[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
                 animations:^{
                     testLabel.layer.transform = CATransform3DMakeRotation(M_PI, -1, 0, 0);                          
                 }
                 completion:^(BOOL finished) {
                 }];
0 голосов
/ 07 августа 2012

Я на самом деле сделал небольшой фреймворк из голосового урока.Возможно, это поможет:

https://github.com/jaydee3/JDFlipNumberView

Содержит три класса:

  • JDFlipNumberView (одна анимированная цифра)
  • JDGroupedFlipNumberView (сгруппированное и связанное по выбору количество переключений для больших чисел)
  • JDDateCountdownFlipView (обратный отсчет даты, просто инициализация с датой, установка фрейма и все, что нужно)1018 * В любом случае вам просто нужно выполнить три шага:
    1. Инициировать класс
    2. Установить значение типа int (или дату)
    3. Запустить анимацию
...