如何在点击的手势上选择图像。我想添加另一个与我点击的图像相同的图像。如果我有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]]
来获取该视图。但我不能。在点击时,我想添加我拍摄的图像。
答案 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)
您似乎将UIImage
与UIImageView
混为一谈。 UImageView
是一种UIView
,可以有一个(且只有一个)超级视图。如果您想知道它所拥有的图像,您可以使用'image'
属性。然后,您可以使用与点按的UIImageView
相同的UIImage
创建新的contentMode
。根据您的应用程序,您可能需要调整其框架大小,并将其设置为UIImageView
。
在任何情况下,如果点击事件根本没有注册,可能是因为userInteractionEnabled=NO
默认为YES
,您必须在代码中明确将其设置为{{1}} ,或在XIB文件中。
答案 2 :(得分:1)
3个问题:
UIImageView
,它与Jon Rose指出的相同UIImage
。UIImageView
设置框架,就像Midhun MP所指出的那样。要解决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)。
祝你好运。