जेड-अक्ष के चारों ओर घूमते समय मुझे एक समान समस्या थी। कंधे को व्यवस्थित करना = हाँ ने जंजीर किनारों को रोक दिया, हालांकि यह प्रदर्शन लागत पर आया। मेरे मामले में मैं विचारों (और इसकी परतों) का फिर से उपयोग कर रहा था और कंधे को बनाए रखना = हाँ चीजों को धीमा कर रहा था।
समाधान, रास्टराइजेशन को बंद करने के बाद, मुझे इसकी आवश्यकता नहीं होने के बाद सही था। हालांकि, एनीमेशन किसी अन्य धागे पर चलता है, इसलिए एनीमेशन पूरा होने पर जानने का कोई तरीका नहीं था ... जब तक मुझे एक बेहद उपयोगी कैट्रानैक्शन विधि के बारे में पता नहीं चला। यह एक वास्तविक कोड है जिसका मैंने उपयोग किया था और इसे इसके उपयोग को स्पष्ट करना चाहिए:
// Create a key frame animation
CAKeyframeAnimation *wiggle = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
NSInteger frequency = 5; // Higher value for faster vibration
NSInteger amplitude = 25; // Higher value for lower amplitude
// Create the values it will pass through
NSMutableArray *valuesArray = [[NSMutableArray alloc] init];
NSInteger direction = 1;
[valuesArray addObject:@0.0];
for (NSInteger i = frequency; i > 0; i--, direction *= -1) {
[valuesArray addObject:@((direction * M_PI_4 * (CGFloat)i/(CGFloat)amplitude))];
}
[valuesArray addObject:@0.0];
[wiggle setValues:valuesArray];
// Set the duration
[wiggle setAdditive:YES];
[wiggle setValueFunction:[CAValueFunction functionWithName:kCAValueFunctionRotateZ]];
[wiggle setDuration:0.6];
// Turn on rasterization to prevent jagged edges (anti-aliasing issues)
viewToRotate.layer.shouldRasterize = YES;
// ************ Important step **************
// Very usefull method. Block returns after ALL animations have completed.
[CATransaction setCompletionBlock:^{
viewToRotate.layer.shouldRasterize = NO;
}];
// Animate the layer
[viewToRotate.layer addAnimation:wiggle forKey:@"wiggleAnimation"];
मेरे लिए एक आकर्षण की तरह काम करता था।
मैंने निहित एनिमेशन के साथ इसका उपयोग करने की कोशिश नहीं की है (यानी एनीमेशन जो गैर-दृश्य संबंधित परत के लिए एनिमेटेबल प्रॉपर्टी में मूल्य परिवर्तन के कारण होता है), हालांकि मैं इसे तब तक काम करने की उम्मीद करता हूं जब तक कैटर्रैक्शन विधि को पहले कॉल किया जाता है संपत्ति परिवर्तन, एक गारंटी के रूप में एक एनीमेशन शुरू होने से पहले ब्लॉक को CATransaction को दिया जाता है।
रेटिना स्क्रीन पर धुंध से बचने के लिए आप 'view.layer.rasterizationScale = [[UIScreen mainScreen] पैमाने] जोड़ना चाहेंगे। –
यह टिप्पणी उत्तर का हिस्सा होना चाहिए। 'कंधा' संपत्ति सेट करना पर्याप्त नहीं है! –
आप सही हैं। किया हुआ। – tarmes