[英]How to pan inside diagram of UIView
实际上,我在MyView的UIView的子类中绘制了三角形,矩形,五边形等图。 当我触摸MyView上的任何点时(无论该点是否在图表中),MyView都会移动。 我想触摸图表的内部,然后将其移动。 我在MyView上使用平移手势识别器。请向我建议。
我的代码是:
在ViewController.m
,
- (void)viewDidLoad
{
MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(0, 100, 200, 100)];
[self.view addSubview:myView];
[super viewDidLoad];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scalePiece:)];
[pinchGesture setDelegate:self];
[myView addGestureRecognizer:pinchGesture];
[pinchGesture release];
}
- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
[gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
[gestureRecognizer setScale:1];
}
}
在MyView.m
,
- (void)drawRect:(CGRect)rect
{
// Drawing code
context =UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
// And draw with a blue fill color
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1.0);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
CGContextMoveToPoint(context, 50.0, 10.0);
CGContextAddLineToPoint(context, 5.0, 70.0);
CGContextAddLineToPoint(context, 150.0, 55.0);
CGContextDrawPath(context, kCGPathFillStroke);
CGContextClosePath(context);
CGContextStrokePath(context);
}
因此,您这里有执行捏手势的代码,并且还想做平移手势吗? 如果是这样,我建议您在viewDidLoad中创建平移手势:
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(movePiece:)];
[myView addGestureRecognizer:panGesture];
[panGesture release];
然后将一个ivar添加到MyView类中:
CGPoint _originalCenter;
最后,拥有移动视图的方法:
- (void)movePiece:(UIPanGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan)
{
_originalCenter = [gestureRecognizer view].center;
}
else if ([gestureRecognizer state] == UIGestureRecognizerStateChanged)
{
CGPoint translation = [gestureRecognizer translationInView:self.view];
[gestureRecognizer view].center = CGPointMake(_originalCenter.x + translation.x, _originalCenter.y + translation.y);
}
}
顺便说一句,关于您的代码的一些观察:
您正在设置捏手势的代表,但这不是必需的。 这是通过initWithTarget
方法完成的。
在您的drawRect
方法中,我认为您想在调用CGContextClosePath
之前先调用CGContextDrawPath
。
无论如何,我希望我通过向您展示一个如何使用平移手势移动子视图的示例来回答这个问题。 (您说“我正在使用摇动手势...”,但我假设您的意思是“我想使用摇动手势...”。)如果我误解了您的问题,请澄清并重新表述该问题,我们可以再提出一个问题破解它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.