मैंने परत के transform.rotation
और transform.translation.x
गुणों को एनिमेट करने के लिए CAKeyframeAnimations का उपयोग किया है, लेकिन मुझे transform
संपत्ति को पूर्ण रूप से एनिमेट करने में समस्या हो रही है। मेरे पास एक परत है जो दो राज्यों और सीएबीएसिक एनीमेशन के डिफ़ॉल्ट इंटरपोलेशन के बीच एनिमेट होना चाहिए और पूरी तरह गलत है और जिस मार्ग को मैं चाहता हूं उसका पालन नहीं करता है। बचाव के लिए CAKeyframe एनीमेशन, या तो मैंने सोचा। CAKeyframeAnimation का उपयोग करके transform
को एनिमेट करने के किसी भी प्रयास को अन्य एनिमेशन चलाने के दौरान तत्काल अंतिम रूप में स्नैप करने के दृश्य में परिणाम दिखाई देते हैं। यदि मैं निम्नलिखित फ़ंक्शन के पहले भाग को हटा देता हूं और मेरे "ट्रांसफॉर्म" ईवेंट को नीचे CAAasicAnimation का उपयोग करने देता है, तो यह ठीक से एनिमेट करता है - यद्यपि गलत तरीके से इंटरपोलेटेड ट्रांसफ़ॉर्म के साथ-साथ।मैं CAKrfrformAnimation के साथ CATransform3Ds को कैसे एनिमेट कर सकता हूं?
मेरे परत प्रतिनिधि लागू किया गया है निम्नलिखित:
- (id <CAAction>) actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
if ([event isEqualToString:@"transform"])
{
CGSize startSize = ((CALayer *)self.layer.presentationLayer).bounds.size;
CGSize endSize = self.layer.bounds.size;
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:event];
animation.duration = 0.25;
NSMutableArray *values = [NSMutableArray array];
int stepCount = 10;
for (int i = 0; i < stepCount; i++)
{
CGFloat p = i/(float)(stepCount - 1);
CGSize size = [self interpolateBetweenSize:startSize andSize:endSize percentage:p];
CATransform3D transform = [self transformForSize:size];
[values addObject:[NSValue valueWithCATransform3D:transform]];
}
animation.values = values;
return animation;
}
// All other animations use this basic animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:event];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;
animation.duration = 0.25;
return animation;
}
बदलना मेरा एक अनुवाद एक घुमाने के बाद है, लेकिन मुझे लगता है कि अलग-फ़्रेम एनिमेशन एक अनुवाद के माध्यम से एनिमेट और एक घुमाएं पागल में परिणाम होगा के साथ एक समूह एनीमेशन नगर। मैंने पुष्टि की है कि आकार & ट्रांसफॉर्म पी के सभी मानों के लिए सही है, और पी सख्ती से 0 से 1.
मैंने एक गैर-डिफ़ॉल्ट समय फ़ंक्शन सेट करने का प्रयास किया है, मैंने सेटिंग करने का प्रयास किया है टाइम फ़ंक्शंस की एक सरणी, मैंने कीटाइम्स को छोड़ दिया है, मैंने दोहराया है, 0 का नंबर, हटाया गया अपूर्ण = हाँ, और आगे का एक भरने वाला मोड और इसका कोई प्रभाव नहीं पड़ा। क्या मैं ट्रांसफॉर्म कीफ्रेम एनीमेशन सही ढंग से नहीं बना रहा हूं?
क्या आप शायद सटीक प्रभाव को स्पष्ट कर सकते हैं जिसे आप प्राप्त करने का प्रयास कर रहे हैं? आप इसे एक रोटेशन के बाद अनुवाद के रूप में वर्णित करते हैं, लेकिन आपके कोड से ऐसा लगता है कि सीमाएं भी एनिमेटिंग कर रही हैं - क्या यह सही है?आप परत को स्थानांतरित करना चाहते हैं, फिर घुमाएं, चाल या घुमावदार एनीमेशन के दोनों चरणों में निरंतर बढ़ते या घटते हुए सीमाएं घुमाएं? – GSnyder
इसे निहित होने की आवश्यकता क्यों है? यह कोड हैकी दिखता है। यदि आप ठीक दाग नियंत्रण चाहते हैं तो क्यों न केवल एनीमेशन बनाएं और इसे सीधे परत पर जोड़ें, जो आप कहते हैं कि आप पहले से ही काम कर रहे हैं? अगर आप चीजें अपनी डिफ़ॉल्ट एनीमेशन का उपयोग करना चाहते हैं तो बस उस प्रतिनिधि विधि से 'शून्य' वापस करें। –