2017-01-20 148 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設置爲UIBarButtonItem的customView。

當做動畫時,不要旋轉UIView,旋轉按鈕。

提醒:不要忘記設置這個UIView的框架。在目標C

示例代碼:
初始化:

@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

非常好,非常感謝你,完美的工作。 仍然想知道它爲什麼不起作用,但現在它很好! –