एनिमेट नहीं करता है मैं सामान्य कोनों से गोलाकार कोनों तक एक कैलियर के संक्रमण को एनीमेशन करने की कोशिश कर रहा हूं। मैं केवल शीर्ष कोनों को गोल करना चाहता हूं, इसलिए मैं UIBezierPath का उपयोग कर रहा हूं। कोड यह रहा:कैलासिक पथ के साथ CABasicAnimation
UIRectCorner corners = UIRectCornerTopLeft | UIRectCornerTopRight;
UIBezierPath* newPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(8.0f, 8.0f)];
UIBezierPath* oldPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(0.0f, 0.0f)];
CAShapeLayer* layer = [CAShapeLayer layer];
layer.frame = self.bounds;
layer.path = oldPath.CGPath;
self.layer.mask = layer;
CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"path"];
[a setDuration:0.4f];
[a setFromValue:(id)layer.path];
[a setToValue:(id)newPath.CGPath];
layer.path = newPath.CGPath;
[layer addAnimation:a forKey:@"path"];
लेकिन जब मैं इस चलाने के लिए, कोने गोल कर रहे हैं, लेकिन कोई animation- यह तुरंत होता है। मैंने SO पर कुछ समान प्रश्न देखे हैं, लेकिन उन्होंने मेरी समस्या का समाधान नहीं किया।
Animating CALayer's shadowPath property
मुझे यकीन है कि मैं सिर्फ एक छोटी सी बात गलत कर रहा हूँ जो समस्या का कारण है हूँ, लेकिन मुझे के जीवन के लिए मैं यह समझ नहीं कर सकते हैं।
समाधान:
- (void)roundCornersAnimated:(BOOL)animated {
UIRectCorner corners = UIRectCornerTopLeft | UIRectCornerTopRight;
UIBezierPath* newPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(8.0f, 8.0f)];
UIBezierPath* oldPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(0.0001f, 0.0001f)];
CAShapeLayer* layer = [CAShapeLayer layer];
layer.frame = self.bounds;
self.layer.mask = layer;
if(animated) {
CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"path"];
[a setDuration:0.4f];
[a setFromValue:(id)oldPath.CGPath];
[a setToValue:(id)newPath.CGPath];
layer.path = newPath.CGPath;
[layer addAnimation:a forKey:@"path"];
} else {
layer.path = newPath.CGPath;
}
}
सच सब मुझे क्या करना जरूरत एनीमेशन के लिए मूल्य 'से' एक उचित स्थापित किया गया था।
समाधान सवाल का हिस्सा के बजाय एक जवाब के रूप अच्छा होगा, लेकिन यह वैसे भी उपयोगी तो +1 :) – buildsucceeded