UIView कोने त्रिज्या एनीमेशन - आईओएस, एक्सकोड, एनीमेशन, autolayout, cornerradius

मेरे पास UIButton के लिए कुछ कक्षा है:

@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];
}

तो यह गोलाकार बटन बनाते हैं और ऑटो लेआउट के लिए कोने त्रिज्या बदलते हैं।

लेकिन मेरी समस्या यह है कि जब मैं इस तरह एनीमेशन करना चाहता हूं:

[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) {

}];
}];

इसलिए मैं इस बटन के लिए चौड़ाई और ऊंचाई बदलता हूं। समस्या यह है कि कोने त्रिज्या ठीक से नहीं बदलता है। क्यूं कर? इसे लेआउट IfNeeded विधि को कॉल करना चाहिए और इसे बदलना चाहिए।

मार्को

संपादित करें:

इसका मतलब है कि एनीमेशन से पहले बटन हैचौड़ाई और ऊंचाई 16. मैं 40 होने का अनुमान लगाता हूं। लेकिन कोनों सभी एनीमेशन 8 पीएक्स के माध्यम से हैं। फिर अंत एनिमेशन पर मैं चौड़ाई मान 40 से चौड़ाई मान 16 तक फिर से एनिमेट करता हूं, अब कोने त्रिज्या सभी एनीमेशन के माध्यम से 20 पीएक्स है। जैसे एनिमेशन के अंत में इसे लेआउट कॉल किया जाएगा

उत्तर:

जवाब के लिए 2 № 1

सोचो कि आपको कॉल करने की ज़रूरत है [self setNeedsUpdateConstraints] से पहले layoutIfNeeded। मुझे यकीन नहीं है कि self.frame.size.width/2 आपको सही मूल्य देगा layoutIfNeeded, हार्ड कोड किए गए मान के साथ प्रयास करने के लायक हो सकता है, उदा। 20 यह देखने के लिए कि क्या कारण हो सकता है।

हनव ने एनीमेशन कोड का उपयोग करके किसी को भी नहीं देखा layoutIfNeeded इसके बजाय एनीमेशन ब्लॉक में एनिमेटेड परिवर्तनों को स्थानांतरित करने का प्रयास करने के लायक भी हो सकते हैं।


उत्तर № 2 के लिए 1

बटन की चौड़ाई / ऊंचाई में परिवर्तन करें और फिर कॉल करें। [स्वयं सेटडिड्सडिस्प्ले];


संबंधित सवाल
सबसे लोकप्रिय