Поэтому я прочитал немного, но все еще не могу найти решение.
У меня есть UIViewController
, который создает (программно) UIScrollView
, который содержит UIView
иUIImage
.UIView
лежит поверх остальных.
Это UIView
генерирует некоторую UIImageViews
, от которой мне нужно получить обратную связь при нажатии.Мне нужно знать, какое изображение было обнаружено, получая их теги.Вот почему я не могу использовать распознаватель жестов , поскольку он может быть вызван только в одном представлении.
Если я вызываю это:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
NSLog(@"tag=%@", [NSString stringWithFormat:@"%i", touch.view.tag]);
}
В представлении (называется GraphView
, который имеет свой собственный класс) Я получаю то, что мне нужно.Тем не менее, мне нужно сделать это со стороны ViewController , потому что я должен открыть модальное окно, контроллеры навигации и т. Д. Если я использую тот же код на ViewController , ничего не происходит.Если я отключаю взаимодействие с пользователем на UIScrollView
, это работает.Если я отключу задержку на UIScrollView
, ничего не произойдет.Независимо от того, как долго вы нажимаете, вы ничего не получите.touchesBegan
не вызывается вообще, даже если задержка включена.
Вот часть реализации ViewController , где я генерирую 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 файл на ViewController выглядит так:
#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
Как всегда, я благодарен всем, кто может помочьс любыми идеями (и я всегда получал большую помощь здесь, так что спасибо заранее :-)).