2012-01-08 24 views
8

Jest tanıyıcılarım ile küçük bir sorunum var.Kaydırma hareketi, döndürme yönüne göre karışıklık yaratır

Sadece bir UIImageView olan "Sprite" adlı bir dersim var. Sprite, bir kullanıcının grafiği çevirebileceği, döndürebileceği ve yeniden boyutlandırabilmesi için kendi jest tanıma ve işleme yöntemlerine sahiptir.

-(void)setup{ //sets up the imageview... 
//add the image, frame, etc. 
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)]; 
    UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)]; 

    [self addGestureRecognizer:panGesture]; 
    [self addGestureRecognizer:pinchGesture]; 
    [self addGestureRecognizer:rotateGesture]; 
} 

//handling methods 
-(void)handlePinch:(UIPinchGestureRecognizer *)recognizer{ 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
    recognizer.scale = 1; 
} 

-(void)handleRotate:(UIRotationGestureRecognizer *)recognizer{ 
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation); 
    recognizer.rotation = 0; 
} 
-(void)handlePan:(UIPanGestureRecognizer *)recognizer{ 
    CGPoint translation = [recognizer translationInView:self]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self] 
} 

Böylece temelde her biri kendi başlarına çalışıyor:

İşte benim kodudur. Ancak, görüntüyü döndürdüğümde veya yeniden boyutlandırdığımda, kaydırma sorunlu hale gelir. Örneğin, resmi ters döndürdüğünüzde, kaydırma hareketleri resmi ters yönde hareket ettirir (yukarı aşağı, sola sürükleme sola, sağa doğru hareket eder vb.). Benzer şekilde, yeniden boyutlandırılmış bir hareketli grafik, daha önce olduğu gibi aynı hızda/mesafede kaymaz.

Bunu nasıl düzeltebileceğimle ilgili bir fikriniz var mı? Bu kodu ViewController yerine (eğer mümkünse) Sprite sınıfı içinde tutmayı tercih ederim. Teşekkür ederim.

cevap

12

translationInView: self, translationInView deneyin: self.superview.

+0

Txs @Jerry, harika cevap. Bu beni tamamen delirtiyordu! –

+0

@Jerry, Güzel çalışıyor ... –

İlgili konular