2011-03-10 79 views
0

我正在制作一个简单的拨盘,在您将手指拖过它时旋转。它旋转得很好,但是当我触摸屏幕上的任何地方并拖动我的手指时它也会旋转。基于触摸问题的旋转

我如何限制第一次接触只在我的imageview对象内?或我哪里错了?

这是我的故障码:

- (id)initWithFrame:(CGRect)frame { 

    self = [super initWithFrame:frame]; 
    if (self) { 

     UIImage *image1 = [UIImage imageNamed:@"[email protected]"]; 

     wheelfrom = [[UIImageView alloc] initWithImage:image1]; 
     wheelfrom.frame =CGRectMake(10, -130, 300, 300); 


     [self addSubview:wheelfrom]; 

    } 
    return self; 
} 



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

    UITouch *touch =[[[event allTouches] allObjects] lastObject]; 
    firstLoc = [touch locationInView:self]; 

} 

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

    UITouch *touch =[[[event allTouches] allObjects] lastObject]; 
    CGPoint curLoc = [touch locationInView:self]; 


    float fromAngle = atan2(firstLoc.y-wheelfrom.center.y, 
          firstLoc.x-wheelfrom.center.x); 
    float toAngle = atan2(curLoc.y-wheelfrom.center.y, 
          curLoc.x-wheelfrom.center.x); 

    float newAngle = angle + (toAngle - fromAngle); 

    CGAffineTransform cgaRotate = CGAffineTransformMakeRotation(newAngle); 
    wheelfrom.transform = cgaRotate; 


angle = newAngle; 
} 

感谢您的帮助!

回答

1

你试试这样,

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 

    CGPoint location = [touch locationInView:self.view]; 


    if(CGRectContainsPoint(wheelfrom.frame, location)) 
    { 
     //do your things    
    } 
} 
+0

你们很棒。非常感谢,我一直在绞尽脑汁对这个问题进行讨论。这是完美的,我真的很感激它! – 2011-03-10 08:21:17

+0

还有一个额外的问题,图像是一个cirle,但是当我选择它时,它将它当作对象的方块来对待。是否有可能让.png的透明部分不可选?或者如何工作?再次感谢。 – 2011-03-10 08:28:28

+0

ü可以使面积除圆为零(透明)NA .. – 2011-03-10 08:33:33

0

您可以通过检查触摸点是否位于图像视图的框架内进行尝试。只有当它是的时才做你想​​要的。

+0

感谢您的答复!就是这样。当处理图像视图内的圆形图像时,是否有办法告诉帧是圆形而不是方形? – 2011-03-10 17:47:17

0

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event里面,检查firstLoc是否在你的范围内。

+0

感谢您的回复。有没有办法设置这个范围,因此它是循环的? – 2011-03-10 17:47:45