我有一个名为PhotoBoothController的类,我用它来使用手势操作图像.我在iPhone上运行时工作正常.但是当我在iPad上运行它时,我在UIPopoverController中显示PhotoBoothController.图像显得很好,但我无法操纵它,因为我的手势似乎无法被识别.我不知道如何让UIPopoverController控制手势.
我提出了popovercontroller并配置了视图:
- - (void)presentPhotoBoothForPhoto:(UIImage *)photo button:(UIButton *)button {
- //Create a photoBooth and set its contents
- PhotoBoothController *photoBoothController = [[PhotoBoothController alloc] init];
- photoBoothController.photoImage.image = [button backgroundImageForState:UIControlStateNormal];
- //set up all the elements programmatically.
- photoBoothController.view.backgroundColor = [UIColor whiteColor];
- //Add frame (static)
- UIImage *frame = [[UIImage imageNamed:@"HumptyLine1Frame.png"] adjustForResolution];
- UIImageView *frameView = [[UIImageView alloc] initWithImage:frame];
- frameView.frame = CGRectMake(50,50,frame.size.width,frame.size.height);
- [photoBoothController.view addSubview:frameView];
- //Configure image
- UIImageView *photoView = [[UIImageView alloc] initWithImage:photo];
- photoView.frame = CGRectMake(50,photo.size.width,photo.size.height);
- photoBoothController.photoImage = photoView;
- //Add canvas
- UIView *canvas = [[UIView alloc] initWithFrame:frameView.frame];
- photoBoothController.canvas = canvas;
- [canvas addSubview:photoView];
- [canvas becomeFirstResponder];
- [photoBoothController.view addSubview:canvas];
- [photoBoothController.view bringSubviewToFront:frameView];
- //resize the popover view shown in the current view to the view's size
- photoBoothController.contentSizeForViewInPopover = CGSizeMake(frameView.frame.size.width+100,frameView.frame.size.height+400);
- self.photoBooth = [[UIPopoverController alloc] initWithContentViewController:photoBoothController];
- [self.photoBooth presentPopoverFromRect:button.frame
- inView:self.view
- permittedArrowDirections:UIPopoverArrowDirectionAny
- animated:YES];
- }
我认为[canvas becomeFirstResponder]可能会这样做,但它似乎没有什么区别.
任何建议都非常感谢,谢谢.
- - (void)viewDidLoad {
- [super viewDidLoad];
- if (!_marque) {
- _marque = [CAShapeLayer layer];
- _marque.fillColor = [[UIColor clearColor] CGColor];
- _marque.strokeColor = [[UIColor grayColor] CGColor];
- _marque.lineWidth = 1.0f;
- _marque.lineJoin = kCALineJoinRound;
- _marque.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:10],[NSNumber numberWithInt:5],nil];
- _marque.bounds = CGRectMake(photoImage.frame.origin.x,photoImage.frame.origin.y,0);
- _marque.position = CGPointMake(photoImage.frame.origin.x + canvas.frame.origin.x,photoImage.frame.origin.y + canvas.frame.origin.y);
- }
- [[self.view layer] addSublayer:_marque];
- UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
- [pinchRecognizer setDelegate:self];
- [self.view addGestureRecognizer:pinchRecognizer];
- UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
- [rotationRecognizer setDelegate:self];
- [self.view addGestureRecognizer:rotationRecognizer];
- UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
- [panRecognizer setMinimumNumberOfTouches:1];
- [panRecognizer setMaximumNumberOfTouches:1];
- [panRecognizer setDelegate:self];
- [canvas addGestureRecognizer:panRecognizer];
- UITapGestureRecognizer *tapProfileImageRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
- [tapProfileImageRecognizer setNumberOfTapsrequired:1];
- [tapProfileImageRecognizer setDelegate:self];
- [canvas addGestureRecognizer:tapProfileImageRecognizer];
- }
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
- return ![gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && ![gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]];
- }