私のアプリでは、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°の回転を見つけていません。
私はそれを行う方法を理解しています。 – Dave