2010-07-13 11 views
6

[UIScrollView zoomToRect:zoomRect animated:YES] की एनीमेशन के लिए अवधि निर्दिष्ट करने का कोई तरीका है?UIScrollView के लिए zoomToRect की अवधि बदलने का कोई तरीका?

इस समय यह या तो तेज़ animated:YES या तत्काल animated:NO है।

मैं एक अवधि निर्दिष्ट करना चाहता हूं, उदाहरण के लिए [UIScrollView setAnimationDuration:2]; या कुछ समान है।

अग्रिम धन्यवाद!

उत्तर

1

UIView के एनिमेशन का उपयोग करें।

यह समझाने में थोड़ा लंबा है, इसलिए मुझे आशा है कि यह छोटा उदाहरण कुछ चीजों को साफ़ करेगा। आगे के निर्देश

[UIView beginAnimations: nil context: NULL]; 
[UIView setAnimationDuration: 2]; 
[UIView setAnimationDelegate: self]; 
[UIView setAnimationDidStopSelector: @selector(revertToOriginalDidStop:finished:context:)]; 

expandedView.frame = prevFrame; 

[UIView commitAnimations]; 

के लिए documantation पर देखो यह एक परियोजना से मैं इस समय पर काम कर रहा है कर रहा हूँ तो यह थोड़ा विशिष्ट है, लेकिन मुझे आशा है कि आप मूल बातें देख सकते हैं।

0

मैं एक UIScrollView उपवर्ग में इस विधि के साथ भाग्यशाली रहे हैं:

- (void)zoomToRect:(CGRect)rect duration:(NSTimeInterval)duration 
{ 
    [self setZoomLimitsForSize:rect.size]; 

    if (duration > 0.0f) { 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:duration]; 
    } 
    [self zoomToRect:rect animated:NO]; 
    if (duration > 0.0f) 
     [UIView commitAnimations]; 

    [self zoomToRect:rect animated:(duration > 0.0f)]; 
} 

यह थोड़े धोखा दे रहा है, लेकिन यह ज्यादातर काम करने के लिए लगता है। कभी-कभी यह असफल हो जाता है, लेकिन मुझे नहीं पता क्यों। इस मामले में यह सिर्फ डिफ़ॉल्ट एनीमेशन गति पर वापस आ जाता है।

+2

मैं इस 'कभी-कभी विफल रहता हूं' केस मार रहा था, जो एनीमेशन को डिफ़ॉल्ट अवधि में चलाने का कारण बनता है। यह मामला तब होता है जब पिछले और लक्ष्य रेक्ट आकार मिलान होते हैं, यहां तक ​​कि मूल के माध्यम से भी भिन्न होते हैं। यहां मेरा नया एनीमेशन कोड है, scrollRectToVisible लाइन जोड़ रहा है, और मैं अब इस असफल मामले को मार नहीं रहा हूं। [UIView एनिमेट विथ अवधि: 2 देरी: 0 विकल्प: UIViewAnimationOptionBeginFromCurrentState एनिमेशन:^{ [scrollView scrollRectToVisible: लक्ष्य एनिमेटेड: नहीं]; [scrollView ज़ूमट्रोक्ट: लक्ष्य एनिमेटेड: नहीं]; } पूरा होने: शून्य]; – fionbio

+0

घास इसके महान nous !!! यह ठीक काम कर रहा है धन्यवाद –

0

वास्तव में ये उत्तर वास्तव में मेरे द्वारा उपयोग किए जाने वाले अंत के करीब हैं, लेकिन यह अलग होने के बाद से अलग से पोस्ट करेगा। मूल रूप से zoomToRect सही ढंग से काम नहीं करता है यदि गंतव्य ज़ूमस्केल वर्तमान के समान है।

आप स्क्रॉल करने की कोशिश कर सकते हैं लेकिन मुझे इसके साथ कोई भाग्य नहीं मिला।

इसके बजाय बस सामग्री ऑफसेट का उपयोग करें और इसे zoomRect.origin और घोंसला पर सेट करें जो एनीमेशन ब्लॉक में है।

[UIView animateWithDuration:duration 
         delay:0.f 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
    if (sameZoomScale) { 
     CGFloat offsetX = zoomRect.origin.x * fitScale; 
     CGFloat offsetY = zoomRect.origin.y * fitScale; 

     [self.imageScrollView setContentOffset:CGPointMake(offsetX, offsetY)]; 
    } 
    else { 
     [self.imageScrollView zoomToRect:zoomRect 
           animated:NO]; 
    } 
       } 
       completion:nil]; 
संबंधित मुद्दे

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