大佬教程收集整理的这篇文章主要介绍了ios – 是否有一个手势识别器可以同时处理捏和平移?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当您放下两根手指然后移动其中一根手指时,图像会像应该的那样展开(放大),但手指下方的像素不再位于手指下方.图像从图像中心缩放,而不是两个手指之间的中点.而这个中心点本身就在发展.我希望中心点的运动能够决定整体图像的平移.
几乎所有iOS应用程序都有相同的行为,图像放大或缩小图像中心周围而不是手指跟踪手指下方的像素?
在我看来,创建一个自定义手势识别器是解决这个问题的正确设计方法,但在我看来,有人会创建这样的识别器,以便商业免费下载和使用.有没有这样的UIGestureRecognizer?
不要忘记遵守UIGestureRecognizerDelegate协议
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }
这是完整的源代码:
#import "ViewController.h" #import <QuartzCore/QuartzCore.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view,typically from a nib. isEdiTing = false; photoView = [[UIImageView alloc] initWithFrame:CGRectMake(0,320,460)]; [photoView setImage:[UIImage imagenamed:@"photo.png"]]; photoView.hidden = YES; maskView = [[UIImageView alloc] initWithFrame:CGRectMake(0,460)]; [maskView setImage:[UIImage imagenamed:@"maskguide.png"]]; maskView.hidden = YES; displayImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,460)]; UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@SELEctor(handlePan:)]; UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@SELEctor(handlePinch:)]; [panGesture setDelegate:self]; [pinchGesture setDelegate:self]; [photoView addGestureRecognizer:panGesture]; [photoView addGestureRecognizer:pinchGesture]; [photoView setUserInteractionEnabled:YES]; [panGesture release]; [pinchGesture release]; btnEdit = [[UIButton alloc] initWithFrame:CGRectMake(60,400,200,50)]; [btnEdit setBACkgroundColor:[UIColor blackColor]]; [btnEdit settitle:@"Start EdiTing" forState:UIControlStateNormal]; [btnEdit addTarget:self action:@SELEctor(toggleEdiTing) forControlEvents:UIControlEventTouchUpInside]; [[self view] addSubview:displayImage]; [[self view] addSubview:photoView]; [[self view] addSubview:maskView]; [[self view] addSubview:btnEdit]; [self updateMaskedImage]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPorTraitUpsideDown); } -(void)dealloc { [btnEdit release]; [super dealloc]; } #pragma mark - #pragma mark update Masked Image Method #pragma mark - -(void)updateMaskedImage { maskView.hidden = YES; UIImage *finalImage = [self maskImage:[self captureView:self.view] withMask:[UIImage imagenamed:@"mask.png"]]; maskView.hidden = NO; //UIImage *finalImage = [self maskImage:photoView.image withMask:[UIImage imagenamed:@"mask.png"]]; [displayImage setImage:finalImage]; } - (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { CGImageRef maskRef = maskImage.CGImage; CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),CGImageGetHeight(maskRef),CGImageGetBitsPerComponent(maskRef),CGImageGetBitsPerPixel(maskRef),CGImageGetBytesPerRow(maskRef),CGImageGetDataProvider(maskRef),NULL,falsE); CGImageRef masked = CGImageCreateWithMask([image CGImage],mask); return [UIImage imageWithCGImage:masked]; } #pragma mark - #pragma mark Touches Began #pragma mark - // adjusts the ediTing flag to make dragging and drop work -(void)toggleEdiTing { if(!isEdiTing) { isEdiTing = true; NSLog(@"ediTing..."); [btnEdit settitle:@"Stop EdiTing" forState:UIControlStateNormal]; displayImage.hidden = YES; photoView.hidden = NO; maskView.hidden = NO; } else { isEdiTing = false; [self updateMaskedImage]; NSLog(@"stopped editTing"); [btnEdit settitle:@"Start EdiTing" forState:UIControlStateNormal]; displayImage.hidden = NO; photoView.hidden = YES; maskView.hidden = YES; } } /* -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { if(isEdiTing) { UITouch *finger = [touches anyObject]; CGPoint currentPosition = [finger LOCATIOnInView:self.view]; //[maskView setCenter:currentPosition]; //[photoView setCenter:currentPosition]; if([touches count] == 1) { [photoView setCenter:currentPosition]; } else if([touches count] == 2) { } } } */ -(void)handlePan:(UIPanGestureRecognizer *)recognizer { CGPoint translation = [recognizer translationInView:self.view]; recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,recognizer.view.center.y + translation.y); [recognizer setTranslation:CGPointMake(0,0) inView:self.view]; } -(void)handlePinch:(UIPinchGestureRecognizer *)recognizer { recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform,recognizer.scale,recognizer.scalE); recognizer.scale = 1; } -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } #pragma mark - #pragma mark Capture Screen Function #pragma mark - - (UIImage*)captureView:(UIView *)yourView { UIGraphicsBeginImageContextWithOptions(yourView.bounds.size,yourView.opaque,0.0); CGContextRef context = UIGraphicsGetCurrentContext(); [yourView.layer renderInContext:context]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } #pragma mark - @end
以上是大佬教程为你收集整理的ios – 是否有一个手势识别器可以同时处理捏和平移?全部内容,希望文章能够帮你解决ios – 是否有一个手势识别器可以同时处理捏和平移?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。