2012-01-09 6 views
5

के साथ UIView को स्थानांतरित करें यहां UI_ 30px को नीचे y = 10 तक ले जाने के लिए मेरा कोड है लेकिन यह एनीमेशन काम नहीं कर रहा है। यह CAKeyframeAnimation बनाने का मेरा पहला प्रयास है, इसलिए कोई भी इसे सही तरीके से लिखने में मेरी सहायता कर सकता है। इसके अलावा मैं चाहता हूं कि मेरा ऑब्जेक्ट मूल स्थान पर वापस न आएं, लेकिन जहां एनीमेशन समाप्त हो गया वहां रहें।CAKeyframeanimation पथ

CGMutablePathRef thePath = CGPathCreateMutable(); 
    CGPathAddRect(thePath, NULL, CGRectMake(self.logo.frame.origin.x, self.logo.frame.origin.y, self.logo.frame.size.width, self.logo.frame.size.height)); 
    CGPathAddRect(thePath, NULL, CGRectMake(self.logo.frame.origin.x, self.logo.frame.origin.y-30, self.logo.frame.size.width, self.logo.frame.size.height)); 
    CGPathAddRect(thePath, NULL, CGRectMake(self.logo.frame.origin.x, 100, self.logo.frame.size.width, self.logo.frame.size.height)); 


    CAKeyframeAnimation* AniLoc = [CAKeyframeAnimation animationWithKeyPath:@"frame"]; 
    AniLoc.path = thePath; 
    AniLoc.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
    AniLoc.keyTimes= [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], 
         [NSNumber numberWithFloat:0.3f], 
         [NSNumber numberWithFloat:1.0f],nil]; 
    AniLoc.duration = 2.0; 

    CFRelease(thePath); 

    [self.logo.layer addAnimation:AniLoc forKey:nil]; 
+0

यह किस तरह से "काम नहीं कर रहा है"? – jrturton

+0

एनीमेशन कुछ भी नहीं चल रहा है –

उत्तर

1

मैं काफी यकीन है कि क्यों अपने विधि काम नहीं कर रहा नहीं हूँ, लेकिन मैं एक और समाधान का सुझाव कर सकते हैं। इसके बजाय फ्रेम ड्राइविंग के, आप स्थिति कुंजी UIView स्थानांतरित करने के लिए बदल सकते हैं:

CGMutablePathRef thePath = CGPathCreateMutable(); 
    CGPathMoveToPoint(thePath, NULL, self.logo.frame.origin.x, self.logo.frame.origin.y); // initial point, notice the function 
    CGPathAddLineToPoint(thePath, NULL, self.logo.frame.origin.x - 30, self.logo.frame.origin.y); 
    CGPathAddLineToPoint(thePath, NULL, 100, self.logo.frame.origin.y); 

    CAKeyframeAnimation* AniLoc = [CAKeyframeAnimation animationWithKeyPath:@"position"]; // notice key change 

    // rest is the same 
    AniLoc.path = thePath; 
    AniLoc.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
    AniLoc.keyTimes= [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], 
         [NSNumber numberWithFloat:0.3f], 
         [NSNumber numberWithFloat:1.0f],nil]; 
    AniLoc.duration = 2.0; 

    CFRelease(thePath); 

    [self.logo.layer addAnimation:AniLoc forKey:nil]; 

मुझे आशा है कि यह आप में मदद करता है।

+1

यह काम नहीं कर रहा है क्योंकि फ्रेम एक व्युत्पन्न संपत्ति है। यदि आपको फ्रेम को एनिमेट करने की आवश्यकता है, तो आप सीमाओं और स्थिति को एनिमेट करते हैं। – alecail