1

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

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]]用来获得这种观点。但我不能。在点击时,我想添加我点击的图像。

4

3 回答 3

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;

于 2012-11-19T11:36:48.360 回答
1

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

无论如何,如果点击事件根本没有被注册,很可能是因为UIImageView默认情况下userInteractionEnabled=NO,您必须将其显式设置为YES在代码中或在 XIB 文件中。

于 2012-11-19T11:01:39.333 回答
1

3个问题:

  1. 正如乔恩罗斯指出的那样,您需要一个UIImageView具有相同功能的新产品。UIImage
  2. 您需要为 new 设置框架UIImageView,就像 Midhun MP 指出的那样。
  3. 两者都错过了手势识别器逻辑,这在您的情况下也被破坏了。您一次只能将手势识别器添加到一个视图。

要解决 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)。

祝你好运。

于 2012-11-19T17:09:54.113 回答