检测子视图的触摸

9

我有一个包含两个UIViewsViewcontroller,一个名为textureView,另一个名为objectView

当我只有一个视图时,我使用以下代码来检测触摸:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSArray *allTouches = [touches allObjects];

    for (UITouch *touch in allTouches)
    {
        gestureStartPoint = [touch locationInView:self.view];
            if([touch view] == controlUIImageview){
                   NSLog(@"TOUCH DETECT");
                }
        }
}

如果我想与textureViewobjectView中的一些内容进行交互,该如何编写此部分代码?

我需要将textureViewcontrolView设置为setUserInteractionEnabled:TRUE吗?

谢谢!


你尝试过将textureView和controlView设置为setUserInteractionEnabled:TRUE吗?当你尝试时发生了什么? - Nick Bull
4个回答

6

另一种实现方式:

        gestureStartPoint = [touch locationInView:self.view];
        if(CGRectContainsPoint(textureView.frame, gestureStartPoint)){
            ...
        }
        if(CGRectContainsPoint(objectView.frame, gestureStartPoint)){
            ...
        }

是的,这也可以工作,但是我如何在特定的UI视图中检测对UIImageView的触摸?因为当UIImageView位于子视图中时,[touch view] == uiimageview对我不起作用。 - molle
CGRect rect1 = [self.view convertRect:textureView.controlUIImageview.frame toView:self.view]; 如果(CGRectContainsPoint(rect1, gestureStartPoint)) ... - aknew

3
尝试为您想要添加的每个子视图添加一个标签,例如:
textureView.tag=0;
objectView.tag=1;

然后:

for (UITouch *touch in allTouches)
    {
     if(touch.view.tag==0){
        //...do your stuff with textureView
     }else{
        //...do your stuff with objectView
     }
}

是的,它可以检测到不同视图,但是如何在特定的UI视图中检测UIImageView上的触摸呢? - molle

1
你可以尝试使用 “单例模式” 。
例如,你有一个 UIImageView 作为 TextureView 的子视图。
创建一个类,比如 object.h,并声明你想要与之交互的子视图,比如:
UIImageView *DisplayPicture
UIView *View;

一旦完成,您可以为这两个视图中的每一个设置标签。
TextureView.tag=0;
Objectview.tag=1;

使用此方法获取视图上的触摸,然后获取其子视图。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];


if (touch.view.tag > 0) {


    NSLog(@"%d",[touch.view.subviews count]);

    //Get Reference for Texture view

    object.View=Touch.view;

    //the index will the position at which u added the Subview(UIImageView) e.g If its the first time you addsubview and index of the subview will be O.

    object.DipslayPicture=[touch.view.subviews objectAtIndex:0];

}else{
  //Similar for ObjectView

}
NSLog(@"tag=%@", [NSString stringWithFormat:@"%i", touch.view.tag]);
i=touch.view.tag;
}

然后您可以使用该对象按照您的意愿进行操作,例如SetImage。

[object.DisplayPicture setImage:@"happiness.png"];

它对我起作用了 :) 希望能帮助到别人 :)


1

如果你想在任何视图上检测触摸事件,你需要设置setUserInteractionEnabled: TRUE,或者在IB中启用(如果你从IB中添加视图)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接