开发者

iOS touchesBegan being overridden by UIScrollView. Not a delay issue. Can't use gesture recognizer in this case

开发者 https://www.devze.com 2023-03-05 23:37 出处:网络
So I read quite a bit, but still I can\'t find the solution. I have a UIViewController which is creating (programatically) a UIScrollView, which Contains a UIView and a UIImage. 开发者_StackOverflow社

So I read quite a bit, but still I can't find the solution.

I have a UIViewController which is creating (programatically) a UIScrollView, which Contains a UIView and a UIImage. 开发者_StackOverflow社区The UIView lies on top of the rest.

This UIView generates some UIImageViews which I need to get feedback from when tapped. I need to know which image was tapped by getting their tags. That's why I can't use gesture recognizer, since it can only be called on one view.

If I call this:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    NSLog(@"tag=%@", [NSString stringWithFormat:@"%i", touch.view.tag]);

}

On the view (called GraphView, which has it's own class) I get what I need. Still, I need to do this from the ViewController side because I have to open modal window, navigation controllers, etc... If I use that same code on the ViewController nothing happens. If I disable User Interaction on the UIScrollView it works. If I disable the delay on the UIScrollView nothing happens. No matter how long you press you get nothing. touchesBegan doesn't get called at all even if the delay is enabled.

Here's the part of the implementation of the ViewController where I generate the Views:

// ScrollView
CGRect frame = CGRectMake(0, 0, 480, 320);
myScrollView = [[UIScrollView alloc] initWithFrame:frame];
myScrollView.backgroundColor = [UIColor blackColor];
myScrollView.showsVerticalScrollIndicator = YES;
myScrollView.showsHorizontalScrollIndicator = YES;
myScrollView.userInteractionEnabled = YES;
myScrollView.contentSize = CGSizeMake(SCROLLVIEW_WIDTH, SCROLLVIEW_HEIGHT);
myScrollView.delegate = self;
[self.view addSubview:myScrollView];

// Add UIImage for background
UIImageView *backgroundGraph = [[UIImageView alloc] initWithFrame:CGRectMake (0,0,SCROLLVIEW_WIDTH,SCROLLVIEW_HEIGHT)];
backgroundGraph.image = [UIImage imageNamed:@"graph_background.png"];
backgroundGraph.userInteractionEnabled = YES;
[myScrollView addSubview:backgroundGraph];
//[self.view addSubview:backgroundGraph];
[backgroundGraph release];

// Add View for Graph.
GraphView *graphViewC = [[GraphView alloc] init];
self.graphView = graphViewC;
graphView.tag = 200;
graphView.userInteractionEnabled = YES;
graphView.frame = CGRectMake(0, 0, SCROLLVIEW_WIDTH, SCROLLVIEW_HEIGHT);
graphView.backgroundColor = [UIColor clearColor];
[myScrollView addSubview:graphView];
//[self.view addSubview:graphView];

.h file on ViewController looks like this:

#import <UIKit/UIKit.h>

@class GraphView;

@interface TrackingViewController : UIViewController <UIScrollViewDelegate> {
    UIScrollView *myScrollView;

    GraphView *graphView;

    int someNum;

#define SCROLLVIEW_HEIGHT 273
#define SCROLLVIEW_WIDTH 599

}

@property (nonatomic, retain) GraphView *graphView;

- (void) openModal;
//- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer;

@property (nonatomic, retain) UIScrollView *myScrollView;

@end

As always, I am thankful to everyone who can help with any ideas(and I've gotten a lot of help here always, so thanks in advance :-) ).

0

精彩评论

暂无评论...
验证码 换一张
取 消