2012-12-14 18 views
10

Drag için. kullanıcı ekranın yarısına Görünüm sürüklemek, Görünüm otomatik olarak atmak sol köşeye sürüklenen olacak, ancak kullanıcının yarısı ekrana kadar sürüklemek yoksa ekranın sağ köşe dönecektir. Burada biraz kayıp var, herhangi bir öğretici falan mı? TeşekkürUIGestureRecognizer ben sağdan sola bir <code>UIView</code> sürüklemek için bir <code>GestureRecognizer</code> inşa etmeye çalışıyorum UIView

DÜZENLEME: İşte biraz kod, onun UIImageView bir UIScrollView içinde ben tüm kaydırma ya da sadece görüntüyü içine sürüklemek gerekir: i sürükle deneyin

_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]; 

Ve yöntemi 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

Sorunuzun yanıtını, ancak "Ben görünümü sürükleyebilir, ama doğru pozisyona gitmesi için nasıl bilmiyorum" gibi ... – rdurand

+0

denediğinizden ilgili daha ayrıntılı bilgi vermelidir @ rdurand evet, bir UIPanGestureRecognizer kullanarak görünümü sürükleyebilirim, ancak tam olarak pozisyonu nasıl algılayacağımı bilmiyorum ve sonra görünümü istenen konuma gönderin. Ve ikinci sorun, sadece yatay olarak görünümü sürüklemek için, sadece bir kod sağlayın – darkman

+0

. Ne denediğini söyle, ne * çalışmıyor *. – rdurand

cevap

22

here üzerinde bakın. Bu, çimdikleme ve kaydırma hareketlerini işlemek için temelleri sağlayacak olan UIGestureRecognizer öğreticisidir. Temelleri öğrendikten sonra, ne istediğinizi gerçekleştirmek gerçekten çok kolay. İhtiyacınız olan tek şey, pan tamamlandığında doğru pozisyona göndermek için görüşün konumunu kontrol etmektir. UIScrollViews üzerinde this other tutorial göz at, bu ikinci bölümü aracılığıyla yol bulmak yardımcı olabilir.

Hem eğitici raywenderlich.com tanıdığım muhtemelen en yararlı iOS öğreticiler siteyi gelir. Bir bulmak için kod üzerinde çalışmak gerekecek, burada size mükemmel bir cevap vermeyecektir

- (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]; 

} 

: Burada


üzerinde çalışmak edebilirsiniz handlePan: yönteme bazı koddur Bunu istediğiniz gibi çalışması için bir yol.

İşte son bir ucu. Bir slideFactor kullanarak bir tür "düzgün" animasyon yapabilirsiniz. Animasyonunuzun daha "gerçekçi" olmasına yardımcı olacak. Eğer doğru "eğer" başına eklenecek ki bu kodun üzerinde çalışın:

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 

Sonra UIView animateWithDuration: yılında, süre gibi slideFactor kullanın.

İlgili konular