在iPhone上点击手势选择图像

时间:2012-11-19 10:18:58

标签: iphone objective-c ios cocoa-touch

如何在点击的手势上选择图像。我想添加另一个与我点击的图像相同的图像。如果我有3张图片,如果我点击了第2张图片,那么它将动态添加第4张图片,与第2张图片相同。

UIImage *image = [[info objectForKey:@"UIImagePickerControllerOriginalImage"] retain];

    UIView *holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width/4, image.size.height/4)];
    UIImageView *imageview = [[UIImageView alloc] initWithFrame:[holderView frame]];


UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
    [tapRecognizer setNumberOfTapsRequired:1];
    [tapRecognizer setDelegate:self];
    [holderView addGestureRecognizer:tapRecognizer];

-(void)tapped:(id)sender {

    [[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];
    NSLog(@"Tapped");
    [self.view bringSubviewToFront:[(UITapGestureRecognizer*)sender view]];
    UIImageView *image = (UIImageView *)[(UITapGestureRecognizer*)sender view];
    [self.view addSubview:image];
}

我正在使用[(UITapGestureRecognizer*)sender view]]来获取该视图。但我不能。在点击时,我想添加我拍摄的图像。

3 个答案:

答案 0 :(得分:5)

问题在于您使用的方法。当您编写(UIImageView *)[(UITapGestureRecognizer*)sender view];时,您将获得相同的添加imageView,并且它的框架将与添加时相同。然后,您使用addSubview添加它,如果您这样做,它将被添加到之前添加的位置。

只需更改您的tapped赞:

-(void)tapped:(id)sender
{
  [[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];
  UIImageView *imgView = (UIImageView *)[(UITapGestureRecognizer*)sender view];
  UIImageView *imageview = [[UIImageView alloc] initWithFrame:yourFrame]; //Set the next frame for the image view
  imageView.image = imgView.image;
  [self.view addSubview:imageView];
  [imageView release];
  imageView = nil;
}

还将手势添加到UIImageView,如:

[imageview addGestureRecognizer:tapRecognizer];不是UIView。

同时设置imageview.userInteractionEnabled = YES;

答案 1 :(得分:1)

您似乎将UIImageUIImageView混为一谈。 UImageView是一种UIView,可以有一个(且只有一个)超级视图。如果您想知道它所拥有的图像,您可以使用'image'属性。然后,您可以使用与点按的UIImageView相同的UIImage创建新的contentMode。根据您的应用程序,您可能需要调整其框架大小,并将其设置为UIImageView

在任何情况下,如果点击事件根本没有注册,可能是因为userInteractionEnabled=NO默认为YES,您必须在代码中明确将其设置为{{1}} ,或在XIB文件中。

答案 2 :(得分:1)

3个问题:

  1. 你需要一个新的UIImageView,它与Jon Rose指出的相同UIImage
  2. 您需要为新UIImageView设置框架,就像Midhun MP所指出的那样。
  3. 两者都错过了手势识别器逻辑,在你的情况下也是如此。您可以一次只向一个视图添加手势识别器。
  4. 要解决3,您需要(a)每个UIImageView一个识别器,或者 (b)您为包含视图选择一个识别器,在您的情况下为self

    如果(a)你真的应该继承UIImageView并在那里实现手势处理。在情况(b)中,您要将识别器添加到self,并在tapped:事件上循环显示子视图,以找到通过

    点击的那个
    for(UIView* subject in self.subviews)
    {
        CGPoint pointInSubjectsView = [recognizer locationInView:subject];
        BOOL pointInsideObject = [subject pointInside:pointInSubjectsView withEvent:nil];
        if(pointInsideObject){
            //subject is the tapped view. do the work...
        }
    }
    

    您的代码表明您正在制作想要取消的动画,并且图像可能会重叠,并且您想要将拍摄的图像放在前面?如果是这种情况,你可能应该选择(a)。

    祝你好运。