我的应用有点麻烦。我在问我的方法。
这是一张图片
基本上我需要色轮在透明盒子里旋转。到目前为止我的工作是什么。我可以拖动色轮,它会旋转。问题是我可以触摸并拖动屏幕上的“任何地方”,它会旋转。我只想让它在'窗口'中旋转。
我基本上添加了一个UIView和一个UIImageView,为ImageView添加了插件,并在touchesBegan和touchesMoved中添加了代码来执行动画。轮子是一个完整的圆形图像,子视图被“剪裁”,不显示图像的下半部分。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *thisTouch = [touches anyObject];
delta = [thisTouch locationInView:wheelImage];
float dx = delta.x - wheelImage.center.x;
float dy = delta.y - wheelImage.center.y;
deltaAngle = atan2(dy,dx);
initialTransform = wheelImage.transform;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint pt = [touch locationInView:wheelImage];
float dx = pt.x - wheelImage.center.x;
float dy = pt.y - wheelImage.center.y;
float ang = atan2(dy,dx);
//do the rotation
if (deltaAngle == 0.0) {
deltaAngle = ang;
initialTransform = wheelImage.transform;
}else
{
float angleDif = deltaAngle - ang;
CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif);
wheelImage.transform = newTrans;
currentValue = [self goodDegrees:radiansToDegrees(angleDif)];
}
}
现在......我的问题如下:
答案 0 :(得分:2)
简单的解决方案是在您喜欢的区域开始触摸时添加BOOL
var设置为true
:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *thisTouch = [touches anyObject];
CGPoint p = [thisTouch locationInView:wheelImage.superview];
if (CGRectContainsPoint(wheelImage.frame, p))
{
rotating = YES;
// rest of your code
...
}
}
和
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (rotating)
{
// your code
}
}
请务必重置rotating
和touchesEnded
中的touchesCanceled
。
答案 1 :(得分:2)
您可能需要考虑使用UISwipeGestureRecognizer并将其添加到您希望识别滑动的视图中。
答案 2 :(得分:1)
如果您将UIImageView子类化并将其放入其中,则只能从该视图中获取触摸,您可能需要将acceptsUserInteraction设置为YES。也改变locationInView:to self;如果从nib加载,请确保将该类设置为该UIImageView的新子类。