2017-01-20 8 views
2

wie Animationen sieht sind nicht meine Spezialität:/Drehen BarButtonItem um 45 Grad (animiert)

In meiner Navigationsleiste habe ich eine benutzerdefinierte BarButtonItem, ein Plus, Sachen in die Liste hinzuzufügen. Ich wollte das Plus um 45 Grad drehen, so dass es zu einem X wurde, wenn es gedrückt wurde und dann als Abbrechen-Taste funktioniert.

habe ich eine Taste als benutzerdefinierte Ansicht auf den BarButtonItem durch dies zu tun:

@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) 
    } 
} 

Dies scheint gut zu funktionieren. Nun, wenn die Taste gedrückt wird ich folgendes tun:

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

ich die Taste Start sehen drehen, aber irgendwie wird es völlig deformiert. Sehen Sie die Bilder für das:

Vorher:

Normal state, before it is pressed

Nach:

enter image description here

Ich verstehe nicht, warum dies geschieht. Wie animiere ich das BarButtonItem korrekt?

Vielen Dank im Voraus.

Grüße

Antwort

4

Sie wissen nicht, warum dies geschieht (meine Vermutung ist, wenn die Transformation zu tun, der Rahmen des Custom wird verkorkste), aber eine Lösung gefunden. Fügen Sie die Schaltfläche einfach in eine andere UIView ein und legen Sie diese UIView als benutzerdefinierte Ansicht von UIBarButtonItem fest.

Wenn Sie die Animation ausführen, drehen Sie nicht die UIView, drehen Sie die Schaltfläche.

Erinnerung: Vergessen Sie nicht, den Rahmen dieser UIView festzulegen.

Beispielcode in 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; 
} 

-Code auszulösen die Rotation:

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

Hallo sorry für die späte Antwort, ich hatte ein arbeitsreiches Wochenende. Ich werde das heute Abend versuchen und werde es euch wissen lassen. Danke. –

+0

@Hardcore_Graverobber NVM, Beispielcode hinzugefügt FYI – jokeman

+0

Sehr gut, vielen Dank, das hat perfekt funktioniert. Ich frage mich immer noch, warum es überhaupt nicht funktioniert hat, aber jetzt ist es gut! –

Verwandte Themen