Обнаружение прикосновения к подпредставлению - PullRequest
9 голосов
/ 27 июня 2011

У меня есть Viewcontroller с двумя UIViews, один с именем 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");
                }
        }
}

Как мне написать эту часть, если у меня есть некоторые вещи, с которыми я хочу взаимодействовать в textureView, а некоторые в objectView?

Нужно ли устанавливать textureView и controlView на setUserInteractionEnabled:TRUE?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 27 июня 2011

Другой способ сделать это:

        gestureStartPoint = [touch locationInView:self.view];
        if(CGRectContainsPoint(textureView.frame, gestureStartPoint)){
            ...
        }
        if(CGRectContainsPoint(objectView.frame, gestureStartPoint)){
            ...
        }
3 голосов
/ 27 июня 2011

Попробуйте добавить tag для каждого подпредставления, которое вы хотите добавить .... например:

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
     }
}
1 голос
/ 09 июля 2013

Вы можете попробовать Синглтонный подход

Например, у вас есть UIImageView в качестве подпредставления в TextureView

Создайте класс, например, object.h и объявите подпредставление, с которым вы хотите взаимодействовать, E.g

UIImageView *DisplayPicture
UIView *View;

Как только это будет сделано. Вы можете установить теги для каждого из двух видов

TextureView.tag=0;
Objectview.tag=1;

Чем использовать этот метод для получения Touch on the View и затем Subviews

- (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 голос
/ 27 июня 2011

Да, вам нужно это сделать, если вы хотите обнаружить прикосновение к любому представлению, вам нужно установить значениеUserInteractionEnabled: TRUE или включить его в IB (если вы добавляете представления из IB).

...