UIView Eckenradiusanimation - IOS, Xcode, Animation, Autolayout, Kurvenradius

Ich habe eine Klasse für UIButton wie folgt:

@implementation UIRoundButton

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self.layer setCornerRadius:self.frame.size.width/2];
}
return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self.layer setCornerRadius:self.frame.size.width/2];
}
return self;
}

- (void) layoutIfNeeded
{
[super layoutIfNeeded];
[self.layer setCornerRadius:self.frame.size.width/2];
}

So erstellen Sie abgerundete Schaltflächen und ändern den Eckenradius für das automatische Layout.

Aber mein Problem ist, wenn ich Animation wie folgt machen möchte:

[UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{


self.deleteButton.alpha = 1;

self.buttonHeight.constant = 40;
self.buttonWidth.constant = 40;

[self layoutIfNeeded];

} completion:^(BOOL finished) {
[UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

self.deleteButton.alpha = 0;

self.buttonHeight.constant = 16;
self.buttonWidth.constant = 16;

[self layoutIfNeeded];

} completion:^(BOOL finished) {

}];
}];

Also ändere ich Breite und Höhe für diese Schaltfläche. Das Problem ist, dass sich der Eckenradius nicht richtig ändert. Warum? Es sollte die layoutIfNeeded-Methode aufrufen und ändern.

Marko

EDIT:

Dies bedeutet, dass vor der Animation die Schaltfläche hatBreite und Höhe 16. Ich animiere zu 40. Aber die Ecken sind durch alle Animationen 8 px. Dann am Ende Animationen animiere ich wieder von Breite 40 bis Breite 16, jetzt ist der Eckenradius 20 Pixel durch alle Animation. Wie es am Ende der Animationen layoutIfNeeeded würde

Antworten:

2 für die Antwort № 1

Denke, du musst anrufen [self setNeedsUpdateConstraints] Vor layoutIfNeeded. Ich bin mir nicht sicher self.frame.size.width/2 wird dir den richtigen Wert geben layoutIfNeeded, könnte es wert sein, mit einem hart codierten Wert, z. 20 um zu sehen, ob das die Ursache sein könnte.

Ich habe niemanden gesehen, der den Animationscode benutzt hat layoutIfNeeded Es könnte sich auch lohnen, zu versuchen, die zu animierenden Änderungen stattdessen in den Animationsblock zu verschieben.


1 für die Antwort № 2

Ändern Sie die Breite / Höhe der Schaltfläche und dann ruf an. [self setNeedsDisplay];


Verwandte Fragen
Speisekarte