2010-03-19 13 views
5

bu biraz kulağa hoş gelebilir, ancak UIView ve bazı trig kullanarak gerçekçi bir rotasyonla bir topuzu yeniden oluşturmaya çalışırken saatlerimi harcadım. Amaca ulaştım ama şimdi düğmenin sola veya sağa dönüp dönmediğini anlayamıyorum. matematik en uygun bölümü buradadır:UIView'nin döndürme yönünü döndürürMoved

 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint pt = [touch locationInView:self]; 

    float dx = pt.x - iv.center.x; 
    float dy = pt.y - iv.center.y; 
    float ang = atan2(dy,dx); 

    //do the rotation 
    if (deltaAngle == 0.0) { 
     deltaAngle = ang; 
     initialTransform = iv.transform; 
    }else 
    { 
     float angleDif = deltaAngle - ang; 
     CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); 
     iv.transform = newTrans; 
     currentValue = [self goodDegrees:radiansToDegrees(angleDif)]; 
    } 
} 

ideal i rotasyon pozitif veya negatif olup olmadığını söylemek için sayısal bir değer kaldıraç olabilir.

cevap

3

Eğer topuzunuzun merkez noktası, topuz için kullandığınız görüntünün merkeziyse, dokunmanın merkezin sol/sağında başlayıp başlamadığının ve yukarı/aşağı doğru hareket edip etmediğini algılayabilmelisiniz. Dokunma solda başlarsa ve aşağı doğru hareket ediyorsa, sola doğru döndürülür. Merkezin diğer tarafında başlayan dokunuşlar için tersi. touchesDidMove yönteminde bir dizide ardışık x koordinatları yerleştirerek ve basit bir karşılaştırma yaparak, dokunuşların yukarı veya aşağı doğru hareket edip etmediğini belirleyebilirsiniz.

0

Teşekkürler Sökücü. Bu, ihtiyacım olan şeye yakın, ama sonuç olarak, topuz nesnesi bir olayı bir denetleyici sınıfına geçirdiğinden, döndürmeden değeri ölçmenin bir yoluna ihtiyacım vardı ... yani: 340 *, CClockWise'da% 94'tür. Her neyse, yukarıdaki yöntemi kullanarak ve currentValue öğesini bir temsilci ile geçirerek çözdüm. Ardından yetki bu yöntemi alıp kendi özel şamandıra var olan değeri alınan son değerden daha yüksek veya daha düşük olması durumunda, karşılaştırmak olacaktır:

// temsilci geri son çağrı # Pragma işareti UIKnobViewDelegate gelen ölçmek için özel değeri kullanır - (void) dialValue: (float) değeri { if (lastValue == 0,00) { lastValue = lastValue; } (değer oradan

, her şeyi yapabilir bizim denetleyici o

hoşlanıyorsa
İlgili konular