2009-07-11 35 views
8
- (void)mouseDragged:(NSEvent *)theEvent { 
    NSSize dynamicImageSize; 
    dynamicImageSize = [[self image] size]; 
    NSSize contentSize = [(NSScrollView*)[[self superview] superview] contentSize]; 
    if(dynamicImageSize.height > contentSize.height || dynamicImageSize.width > contentSize.width) 
    { 
     float x = startOrigin.x - ([theEvent locationInWindow].x - startPt.x); 
     float y = startOrigin.y - ([theEvent locationInWindow].y - startPt.y); 
     [self scrollPoint:NSMakePoint(x, y)]; 
    } 
} 

उपरोक्त कोड में मुझे स्क्रॉलिंग को एनिमेट करने की आवश्यकता है। इसे कैसे प्राप्त किया जा सकता है? धन्यवाद।स्क्रॉलपॉइंट को एनिमेट कैसे करें?

+1

आप कैसे यह पता लगाने की सक्षम थे? एक बहुत ही सरल अनुरोध की तरह लगता है ... – Chetan

+0

@ खेतान: +1, मैं यह भी जानना चाहूंगा – Dov

उत्तर

6

मेरे ऐप में, मैं सेट clipView के boundsOrigin अपने एनिमेटर का उपयोग कर:

[NSAnimationContext beginGrouping]; 
NSClipView* clipView = [[myView enclosingScrollView] contentView]; 
NSPoint newOrigin = [clipView bounds].origin; 
newOrigin.x = my_new_origin.x; 
[[clipView animator] setBoundsOrigin:newOrigin]; 
[NSAnimationContext endGrouping]; 
+2

मैं इस विधि से सावधान रहूंगा - मैंने कुछ अजीब व्यवहार देखा है (उदा। स्क्रॉलबार तोड़ते हैं यदि नई उत्पत्ति का मान सटीक पूर्णांक नहीं है)। ऐप्पल के दस्तावेज़ों से: ** आप सामान्य रूप से NSClipView क्लास से सीधे संपर्क नहीं करते हैं; यह मुख्य रूप से NSScrollView क्लास के लिए स्क्रॉलिंग मशीनरी के रूप में प्रदान किया जाता है। ** मैं अभिी की विधि का उपयोग करने के लिए प्रेरित हूं जो दस्तावेज़ दृश्य पर scrollPoint पर निर्भर करता है। –

1

मुझे यकीन नहीं है कि यह एक समर्थित एनीमेशन प्रकार है, लेकिन क्या आपने animator प्रॉक्सी ऑब्जेक्ट के माध्यम से कॉल करने का प्रयास किया है?

उदाहरण के लिए। [[self animator] scrollPoint:NSMakePoint(x, y)];

+0

नहीं, यह काम नहीं करेगा। यह एक समर्थित एनिमेटेबल संपत्ति नहीं है (हालांकि शायद यह एक अच्छा वृद्धि अनुरोध होगा?)। – kperryua

12

आप ऐसा करने के लिए NSAnimation का उप-वर्ग बना सकते हैं। मैंने अपनी एक ओपन सोर्स प्रोजेक्ट (सार्वजनिक डोमेन लाइसेंस के साथ) के हिस्से के रूप में बनाया है।

आप इसे यहां पा सकते हैं: https://github.com/abhibeckert/Dux/blob/master/Dux/DuxScrollViewAnimation.m (नोट: इस प्रोजेक्ट में एआरसी सक्षम है। यदि आप एआरसी का उपयोग नहीं कर रहे हैं तो आपको उचित अपडेट करने की आवश्यकता होगी)।

उदाहरण:

[DuxScrollViewAnimation animatedScrollToPoint:NSMakePoint(x,y) inScrollView:self.enclosingScrollView]; 
+0

आपको बहुत बहुत धन्यवाद। यह वर्ग वास्तव में सहायक है और एनीमेशन अपेक्षा के अनुसार काम करता है। – aumanets

+1

@aumanets ध्यान में रखें यह शायद मैवरिक्स के साथ फिर से जाना चाहिए। मैंने अभी तक ऐसा नहीं किया है - स्क्रॉल दृश्य अब cubicEaseInOut का उपयोग नहीं करते हैं। मुझे नहीं पता कि नए एल्गोरिदम को कैसे कार्यान्वित किया जाए। –

+0

इस बारे में सोचा नहीं था। चेतावनी के लिए धन्यवाद। – aumanets

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