2017-01-20 20 views
2

выглядит как анимация не моя специальность:/Поворот BarButtonItem на 45 градусов (анимированные)

В моей навигационной панели у меня есть обычай BarButtonItem, плюс, чтобы добавить товар в список. Я хотел повернуть плюс на 45 градусов, чтобы он стал X, когда он был нажат, и затем работает как кнопка отмены.

Я добавил кнопку, как настраиваемое представление в BarButtonItem делая это:

@IBOutlet weak var addQuestionaryButton: UIBarButtonItem! 
{ 
    didSet { 
     let icon = UIImage(named: "add") 
     let iconSize = CGRect(origin: CGPoint.zero, size: icon!.size) 
     let iconButton = UIButton(frame: iconSize) 
     iconButton.setBackgroundImage(icon, for: .normal) 
     addQuestionaryButton.customView = iconButton 
     iconButton.addTarget(self, action: #selector(QuestionaryListViewController.addClicked(_:)), for: .touchUpInside) 
    } 
} 

Это, кажется, работает хорошо. Теперь при нажатии на кнопку я делаю следующее:

UIView.animate(withDuration: 0.5, animations:{ 
      self.addQuestionaryButton.customView!.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_4)) 
     }) 

Я могу видеть кнопку начинает вращаться, но так или иначе он становится полностью деформирована. Смотрите фотографии для этого:

До:

Normal state, before it is pressed

После:

enter image description here

Я не понимаю, почему это происходит. Как правильно анимировать BarButtonItem?

Заранее спасибо.

Привет

ответ

4

Не знаю, почему это происходит (моя догадка при выполнении преобразования, рама customView будет перепутались), но нашел решение. Просто поместите кнопку в другой UIView, а затем установите этот UIView как customView UIBarButtonItem.

При выполнении анимации не поворачивайте UIView, поворачивайте кнопку.

Напоминание: не забудьте установить рамку этого UIView.

Пример кода в Objective C:
Init:

@interface ViewController() 
@property (nonatomic, strong) UIButton* itemButton; 
@end 

@implementation ViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    //button init 
    self.itemButton = [[UIButton alloc] init]; 
    [self.itemButton setBackgroundImage:[UIImage imageNamed:@"imgName"] forState:UIControlStateNormal]; 
    self.itemButton.frame = CGRectMake(0, 0, 30, 30); 

    //container for the button 
    UIView* btnContainer = [[UIView alloc] init]; 
    btnContainer.frame = CGRectMake(0, 0, 30, 30); 
    [btnContainer addSubview:self.itemButton]; 
    //set the container as customView of the UIBarButtonItem 
    UIBarButtonItem* applyButton = [[UIBarButtonItem alloc] initWithCustomView:btnContainer]; 

    self.navigationItem.rightBarButtonItem = applyButton; 
} 

код, чтобы вызвать вращение:

[UIView animateWithDuration:0.5 animations:^{ 
     self.itemButton.transform = CGAffineTransformRotate(self.itemButton.transform, M_PI_4); 
}]; 
+0

Привет извините за поздний ответ, у меня был напряженный уик-энд. Я попробую сегодня вечером и дам вам знать. Спасибо. –

+0

@Hardcore_Graverobber NVM, добавленный код примера FYI – jokeman

+0

Очень хорошо, спасибо, что отлично работали. Все еще интересно, почему это не сработало, но теперь это хорошо! –