CATransform3d UIButton - PullRequest
       28

CATransform3d UIButton

5 голосов
/ 02 марта 2011

Кажется, я не могу заставить простое 3d-преобразование работать с кнопкой, и документация, похоже, не помогает.Я начал с шаблона приложения на основе вида.Я добавляю в каркас QuartzCore и импортирую его в заголовок ViewController.В конструкторе интерфейса я перетаскиваю две кнопки Round Rect и соединяю их с button1 и button2 соответственно, а также соединяю их обоих с buttonPressed: метод.

Быстрый запуск с закомментированной анимацией подтверждает, что тольконажатие кнопки изменяет ее метку.

После возврата анимации я получаю сообщение «Несовместимый тип» для аргумента 1 «setTransform:» в «sender.transform = t;»line (Теперь эта фиксированная линия изменена на [sender.layer setTransform: t];)

Как мне заставить его вращаться на 360 градусов.Я думаю, что проблема в том, что начальное и конечное состояния одинаковы, поэтому он не знает, где их вращать.

@interface animation2ViewController : UIViewController {

    IBOutlet UIButton *button1;
    IBOutlet UIButton *button2;

}

-(IBAction) buttonPressed:(UIButton *)sender;

@end

И файл .m

#import "animation2ViewController.h"

@implementation animation2ViewController

-(IBAction)buttonPressed:(UIButton *)sender {

    [sender setTitle:@"new title" forState:UIControlStateNormal];
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         CATransform3D t = CATransform3DIdentity;
                         t.m34 = -1 / 1000;
                         t = CATransform3DRotate(t, 360 * M_PI / 180, 0.0, 1.0, 0.0);  //ultimately want 360 degrees but starting here first
                         [sender.layer setTransform:t];
                     } 
                     completion:^(BOOL finished) {

                     }];

}

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

M_PI - это поворот на 180 °, что означает, что вы делаете 90 раз по 360 °.
try t = CATransform3DRotate(t, M_PI, 0.0, 1.0, 0.0);
и для ошибки установщика попробуйте [sender.layer setTransform:t];
, потому что вы можете просто преобразоватьlayer

И для конца вам нужно зафиксировать анимацию в конце, иначе она не будет анимирована
[UIView commitAnimations];

1 голос
/ 21 июля 2012

Попробуйте это:

  1. Поворот на 1/3 of a full rotation
  2. сделать анимацию

Вы, наверное, уже поняли это, увидев, что вы опубликовали более года назад, но для тех, у кого такой же вопрос, попробуйте так, как оно должно работать.

...