2011-10-02 16 views
23

मैं एक आईफोन छवि दृश्य की वर्तमान स्थिति को खोजने की कोशिश कर रहा हूं जो स्क्रीन पर एनिमेट कर रहा है।एनीमेशन के दौरान UIView की वर्तमान स्थिति तक पहुंच

मैं बनाने और उसके बाद imageView की वर्तमान CGPoint पता लगाने के लिए हालांकि यह केवल मुझे देता है मैं एक दूसरे

-(void)findPoint{ 

    for (UIImageView *projectile in bullets) {   
     label.text = [NSString stringWithFormat:@"%f", projectile.center.x]; 
     label2.text = [NSString stringWithFormat:@"%f", projectile.center.y]; 
    } 
} 

की इस पद्धति का हर 60 वें फोन तो

-(IBAction)button:(UIButton *)sender{ 
    UIImageView *myImageView =[[UIImageView alloc] initWithImage: 
            [UIImage imageNamed:@"ball.png"]];  
    myImageView.frame = CGRectMake(0, self.view.frame.size.height/2, 40, 40);  
    [self.view addSubview:myImageView]; 
    [myArray addObject:myImageView]; 

    [UIView animateWithDuration:.5 
          delay:0 
       options:(UIViewAnimationOptionAllowUserInteraction) // | something here?) 
        animations:^{ 
         myImageView.frame = CGRectOffset(myImageView.frame, 500, 0);  
        } 
        completion:^(BOOL finished){ 
         [myArray removeObject:myImageView]; 
         [myImageView removeFromSuperview]; 
         [myImageView release]; 
        } 
    ]; 
} 

तरह imageView चेतन बिंदु जहां एनीमेशन समाप्त होता है, मैं स्क्रीन के एनिमेटिंग वाली छवि के वर्तमान CGPoint को प्राप्त करना चाहता हूं। क्या ऐसा कोई विकल्प है जिसे मुझे ऐसा करने के लिए UIViewAnimationOptionAllowUserInteraction के अलावा अन्य लागू करने की आवश्यकता है? यदि नहीं, तो मैं एनिमेटिंग छवि दृश्य की वर्तमान स्थिति कैसे प्राप्त करूं?

उत्तर

44

आप प्रस्तुति लेयर का उपयोग कर सकते हैं - कैलियर की एक संपत्ति जो "वर्तमान में प्रदर्शित होने वाली परत के संस्करण के करीब अनुमान प्रदान करती है"। बस इसे इस तरह का उपयोग करें:

CGRect projectileFrame = [[projectile.layer presentationLayer] frame]; 
+0

धन्यवाद !! यह एक चेतावनी संख्या '-पोशनेशन लेयर' विधि के अलावा पूरी तरह से काम करता है। क्या मुझे एक ढांचा आयात करना है? – user975134

+0

इसे # आयात फिर से धन्यवाद !! – user975134

+0

उत्तर स्वीकार करने के लिए पूरी तरह से पर्याप्त है? :-) हां, मैं यह उल्लेख करना भूल गया था कि आपको क्वार्ट्जकोर.फ्रेमवर्क को लिंक करना चाहिए और एक आयात # आयात जोड़ना चाहिए, जैसे आप जब भी कैलियर से निपटेंगे। – adamsiton

-1

बहुत view.frame के लिए एक KVO स्थापित करने के लिए आसान, this answer में उल्लेखित है। आप सीजीआरईटी के रूप में नया फ्रेम प्राप्त करने के लिए नए मूल्य का निरीक्षण कर सकते हैं।

+1

यह दुर्भाग्यवश पर काम नहीं करता है, मैंने '[view.layer addObserver: self forKeyPath: @" फ्रेम "विकल्पों के साथ प्रयास किया: NSKeyValueObservingOptionNew संदर्भ: NULL];' और '[addObserver: self forKeyPath: @" परत देखें। फ्रेम "विकल्प: NSKeyValueObservingOptionNew संदर्भ: NULL];' – jrmgx

संबंधित मुद्दे