我有一个带有自定义drawRect()方法的UIView,用于某些绘图。
我使用UIPinchGestureRecognizer来实现缩放效果。
这是行动方法:
- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer
{
//NSLog(@"Pinch gesture recognized");
CGPoint touchOrigin = [recognizer locationInView:self];
_currentScaleOrigin = touchOrigin;
if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"%16@ x = %f, y = %f", @"Pinch end:", touchOrigin.x, touchOrigin.y);
return;
}
if (recognizer.state == UIGestureRecognizerStateChanged)
{
//NSLog(@"scale = %f", recognizer.scale);
NSLog(@"%16@ x = %f, y = %f", @"Pinch origin:", touchOrigin.x, touchOrigin.y);
// scale has at start a value of 1.0 and increases as fingers moves away from each other
_currentScaleLevel += recognizer.scale - 1;
[self setNeedsDisplay]; // call drawRect for redrawing at current scale level
}
recognizer.scale = 1;
}
当收到UIGestureRecognizerStateEnded
消息时,我得到一些奇怪的坐标偏移:
Pinch origin: x = 358.000000, y = 630.000000
Pinch origin: x = 355.000000, y = 627.000000
Pinch origin: x = 353.000000, y = 625.000000
Pinch origin: x = 351.000000, y = 624.000000
Pinch origin: x = 351.000000, y = 623.000000
Pinch origin: x = 350.000000, y = 622.000000
Pinch origin: x = 349.000000, y = 622.000000
Pinch origin: x = 349.000000, y = 622.000000
Pinch end: x = 315.000000, y = 750.000000
...和免费翻译:)我不需要。 我不知道翻译的来源。
如何禁用此翻译?
答案 0 :(得分:0)
解决了它。
接收UIGestureRecognizerStateEnded
时,我正在为我的_currentScaleOrigin
分配两个手指中的最后一个点,用于执行缩放转换。
我不知道UIPinchGestureRecognizer会在屏幕上返回最后一个手指位置的CGPoint。
这是整个方法代码:
- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer
{
#if 1
static CGPoint point_0;
static CGPoint point_1;
if ([recognizer numberOfTouches] > 1)
{
point_0 = [recognizer locationOfTouch:0 inView:self];
point_1 = [recognizer locationOfTouch:1 inView:self];
NSLog(@"pinch loc 0: (%f, %f)", point_0.x , point_0.y);
NSLog(@"pinch loc 1: (%f, %f)", point_1.x , point_1.y);
} else if ([recognizer numberOfTouches] == 1) {
point_0 = [recognizer locationOfTouch:0 inView:self];
NSLog(@"pinch loc 0: (%f, %f)", point_0.x , point_0.y);
}
#endif
switch (recognizer.state)
{
case UIGestureRecognizerStateBegan:
{
CGPoint pointBegin = [recognizer locationInView:self];
NSLog(@"%16@ x = %f, y = %f", @"Pinch start:", pointBegin.x, pointBegin.y);
} break;
case UIGestureRecognizerStateChanged:
{
_currentScaleOrigin = [recognizer locationInView:self];
//NSLog(@"scale = %f", recognizer.scale);
NSLog(@"%16@ x = %f, y = %f", @"Pinch origin:", _currentScaleOrigin.x, _currentScaleOrigin.y);
// scale has at start a value of 1.0 and increases as fingers moves away from each other
_currentScaleLevel += recognizer.scale - 1;
// call drawRect for redrawing at current scale level
[self setNeedsDisplay];
} break;
case UIGestureRecognizerStateEnded:
{
CGPoint pointEnded = [recognizer locationInView:self];
NSLog(@"%16@ x = %f, y = %f", @"Pinch end:", pointEnded.x, pointEnded.y);
//return;
} break;
default :
{
NSLog(@"other state");
}
}
recognizer.scale = 1;
}