2011-12-04 11 views
0

私のアプリでは、CATransform3DMakeRotationを使ってUIViewを回転させて、ノブを想像してみてください。 私の問題は、すべてがうまく動いていることです。私が望むように動きますが、触ったときに回転を開始すると、中心に180度回転します。理由はわかりません。CATransform3DMakeRotationでUIViewを左右に回転

私はあなたに私のコードを示しています。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
     { 
     if (Tag ==subView.tag) 

      { 
        CGPoint Location = [[touches anyObject] locationInView:subView.superview]; 
       int x = subView.center.x; 
       int y = subView.center.y; 
       float dx = Location.x - x; 
       float dy = Location.y - y; 
       double a = atan2f(-dx, dy); 

       subView.layer.position = subView.center; 
       subView.layer.transform = CATransform3DMakeRotation(a, 0, 0, 1); 
     }} 




-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

if (Tag ==subView.tag) 

    { 
     [self touchesBegan:touches withEvent:event]; 
}} 

編集:ここで私は、問題は、私はビューに触れる箇所にあった問題

CGPoint Location = [withTheTouch locationInView:theViewToRotate.superview]; 
    NSLog(@"location x%f",Location.x); 
    NSLog(@"location y%f",Location.y); 
    int x = theViewToRotate.center.x; 
    int y = theViewToRotate.center.y; 
    NSLog(@" X %i",x); 
    NSLog(@" Y %i",y); 
    float dy; 
    float dx; 

    if (Location.y < theViewToRotate.center.y) 
    { 
     dx = x- Location.x; 
     dy = y- Location.y; 

     NSLog(@"dx %f",dx); 
     NSLog(@"dy %f",dy); 
     NSLog(@"sopra il View.Center"); 

    } else { 

     dx = Location.x - x; 
     dy = Location.y - y; 
     NSLog(@"sotto il View.Center"); 

    } 
    float ang = atan2(-dx, dy); 
    NSLog(@"anchorPoint %@",NSStringFromCGPoint(theViewToRotate.layer.anchorPoint)); 
    NSLog(@"Position %@",NSStringFromCGPoint(theViewToRotate.layer.position)); 
    NSLog(@"angle %f",ang); 
    //theViewToRotate.layer.position = theViewToRotate.center; 


if(ang) 

    { 
     theViewToRotate.layer.transform = CATransform3DMakeRotation(ang, 0, 0, 1); //ruoto sul vettore Z 

    } 
    else 
    { 
     //theViewToRotate.frame = CGRectMake(theViewToRotate.frame.origin.x, theViewToRotate.frame.origin.y , theViewToRotate.frame.size.width, theViewToRotate.frame.size.height); 
    } 

を解決する方法を。

ここで2つの角度の間で回転をロックする方法を理解する必要があります。私は360°の回転を見つけていません。

+0

私はそれを行う方法を理解しています。 – Dave

答えて

0

こんにちは、これは、ビュー自体に既存の回転があるためです。あなたは現在の回転を取得し、そこから回転を開始する必要があります。

あなたがしていることは、常にここから始まっています。CATransform3DMakeRotation(a、0、0、1);

これは、独自の定義済みの回転を持ちます。あなたがそれに触れると180度シフトします。現在のビューの回転から回転を開始すると、これは起こりません。

希望すること

関連する問題