UIView

2012-12-14 41 views
10

खींचने के लिए UIGestureRecognizer मैं GestureRecognizer को UIView को दाएं से बाएं खींचने की कोशिश कर रहा हूं। यदि उपयोगकर्ता दृश्य के आधे भाग में दृश्य खींचता है, तो दृश्य को इसे छोड़ने के लिए स्वचालित रूप से बाएं कोने में खींचा जाएगा, लेकिन यदि उपयोगकर्ता स्क्रीन पर आधे तक नहीं खींचता है तो यह स्क्रीन के कोने दाएं ओर वापस आ जाएगा। यहां कुछ खो गया, कोई ट्यूटोरियल या कुछ? धन्यवादUIView

संपादित करें: Heres कुछ कोड, अपने एक UIImageView, एक UIScrollView अंदर, मैं पूरी पुस्तक या सिर्फ छवि इसके अंदर खींचें करने के लिए की जरूरत है:

_myScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, self.window.bounds.size.height)]; [_myScroll setContentSize:CGSizeMake(self.window.bounds.size.width , 1300)]; 

_tutorial = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 1300)]; [_tutorial setImage:[UIImage imageNamed:@"Default"]]; 
_tutorial.contentMode = UIViewContentModeScaleAspectFit; [_myScroll addSubview:_tutorial]; 

_tutorial.userInteractionEnabled = YES; 
    UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc]initWithTarget:_tutorial action:@selector(handlePan:)]; 
[_tutorial addGestureRecognizer:recognizer]; 

    [self.window addSubview:_myScroll]; 

और विधि मैं खींचें करने की कोशिश UIImageView

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 

    CGPoint translation = [recognizer translationInView:_myScroll]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll]; 

} 
+0

मैंने आपके प्रश्न का उत्तर दिया, लेकिन आपको जो भी कोशिश की गई है, उस पर आपको अधिक जानकारी देनी चाहिए, जैसे कि "मैं दृश्य खींच सकता हूं, लेकिन यह नहीं जानता कि इसे सही स्थिति में कैसे बनाया जाए" ... – rdurand

+0

@ rdurand हाँ, मैं एक UIPanGestureRecognizer का उपयोग करके दृश्य खींच सकता हूं, लेकिन मुझे नहीं पता कि स्थिति का पता लगाने के लिए बिल्कुल सही तरीका है, और फिर दृश्य को वांछित स्थिति में भेजें। और दूसरी समस्या यह है कि दृश्य को कैसे खींचें, केवल क्षैतिज – darkman

+0

कुछ कोड प्रदान करें। हमें बताएं कि आपने क्या प्रयास किया है, क्या * काम नहीं करता है। – rdurand

उत्तर

22

here पर एक नज़र डालें। यह एक UIGestureRecognizer ट्यूटोरियल है जो आपको चुटकी और पैन जेस्चर को संभालने के लिए मूलभूत बातें देगा। एक बार जब आप मूल बातें सीख चुके हैं, तो आप जो चाहते हैं उसे पूरा करना वास्तव में आसान है। एक बार पैन को सही स्थिति में भेजने के लिए पूरा होने के बाद आपको केवल दृश्य की स्थिति की जांच करनी होगी। पर this other tutorial पर एक नज़र डालें, यह आपको दूसरे भाग के माध्यम से अपना रास्ता खोजने में मदद कर सकता है।

दोनों ट्यूटोरियल raywenderlich.com से आते हैं, शायद सबसे उपयोगी आईओएस ट्यूटोरियल साइट जो मुझे पता है। ,

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 

    CGPoint translation = [recognizer translationInView:_myScroll]; 

    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 

    if (recognizer.state == UIGestureRecognizerStateEnded) { 

     // Check here for the position of the view when the user stops touching the screen 

     // Set "CGFloat finalX" and "CGFloat finalY", depending on the last position of the touch 

     // Use this to animate the position of your view to where you want 
     [UIView animateWithDuration: aDuration 
           delay: 0 
          options: UIViewAnimationOptionCurveEaseOut 
         animations:^{ 
      CGPoint finalPoint = CGPointMake(finalX, finalY); 
      recognizer.view.center = finalPoint; } 
         completion:nil]; 
    } 


    [recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll]; 

} 

मैं तुम्हें सही जवाब यहाँ नहीं देंगे आप कोड पर काम करने के लिए एक को ढूंढना होगा:


यहाँ अपने handlePan: विधि पर कुछ कोड आप पर काम कर सकते है इसे काम करने के तरीके के रूप में आप इसे चाहते हैं।

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

CGPoint velocity = [recognizer velocityInView:self.view]; 
CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y)); 
CGFloat slideMult = magnitude/200; 

float slideFactor = 0.1 * slideMult; // Increase for more slide 

फिर UIView animateWithDuration: में, अवधि के रूप में slideFactor का उपयोग करें।