iOS касается начала переопределения UIScrollView. Не проблема задержки. В этом случае нельзя использовать распознаватель жестов - PullRequest
1 голос
/ 13 мая 2011

Поэтому я прочитал немного, но все еще не могу найти решение.

У меня есть 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

Как всегда, я благодарен всем, кто может помочьс любыми идеями (и я всегда получал большую помощь здесь, так что спасибо заранее :-)).

...