2012-07-01 3 views
2

Я фактически пытаюсь вставить функции делегата касания (тип touchBegan:withEvent, или touchEnded:withEvent) внутри класса customScrollView, который реализует gestureRecognizers.Делегатор распознавателя жестов: как реализовать функции делегата касания

Когда я пытаюсь настроить делегат объекта распознавателя на себя, у моего SDK есть сообщение с предупреждением о «несовместимом идентификаторе типа».

Я понимаю, что протокол делегата GestureRecognizer не включает такую ​​функцию, но я не знаю, какой делегат я должен запускать, чтобы использовать вышеупомянутую функцию внутри моего пользовательского представления.

Большое спасибо за ваши ответы

Виктор-Мари

Вот мой код:

@interface TapScrollView : UIScrollView { 

    // id<TapScrollViewDelegate> delegate; 
    NSMutableArray *classementBoutons; 
    int n; 
    int o; 
//UIImageView *bouton; 

} 
//@property (nonatomic, assign) id<TapScrollViewDelegate> delegate; 
//@property (nonatomic, retain) UIImageView *bouton; 

//@property (strong, nonatomic) UIPanGestureRecognizer *bouton01pan; 

-(id)init; 
-(void)initierScrollView; 

-(void) createGestureRecognizers; 
-(IBAction)handlePanGesture:(UIPanGestureRecognizer*)sender; 


@end 



#import "TapScrollView.h" 


@implementation TapScrollView 

//@synthesize bouton; 

- (void)setUpBoutonView { 
    // Create the placard view -- its init method calculates its frame based on its image 
    //boutonHome *aBoutonMain = [[boutonHome alloc] init]; 
    //self.boutonMain = aBoutonMain; 
    //[boutonMain setCenter:CGPointMake(200, 200)]; 
    //[self addSubview:boutonMain]; 
} 

- (id) init 
{ 
    if (self = [super init]) 
    { 
     NSLog(@"Classe TapScrollView initiée"); 
    } 
    return self; 
} 


-(void)initierScrollView 
{ 
    int i; 
    for (i=0; i<6; i++) { 

     UIImage *image = [UIImage imageNamed:@"back.png"]; 
     UIImageView *bouton = [[UIImageView alloc] initWithImage:image]; 
     [bouton setTag:i]; 
     [bouton setFrame:CGRectMake(72+20*i,10,62,55)]; 
     [classementBoutons insertObject:bouton atIndex:i]; 
     bouton.userInteractionEnabled = YES; 

     UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; 
     recognizer.delegate = self; 
     [bouton addGestureRecognizer:recognizer]; 
     [self addSubview:bouton]; 
} 
} 
//- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
//{  
// UITouch *touch = [touches anyObject]; 
//[super touchesBegan:touches withEvent:event]; 

    // for (o=1; o<6; o++) { 
    // if ([touch view] == [self viewWithTag:o]) 
    // { 
    // UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:[classementBoutons objectAtIndex:o] action:@selector(handlePanGesture:)]; 
    // [[classementBoutons objectAtIndex:o] addGestureRecognizer:recognizer]; 
    // bouton01 = [self viewWithTag:o]; 
    // } 
    // } 

    //CGPoint touchPoint = [touch locationInView:self]; 
    //[self animateFirstTouchAtPoint:touchPoint]; 
    // return; 
//} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (n=0; n<6; n++) { 
     NSLog(@"touche cancelled"); 
     [[classementBoutons objectAtIndex:n] setFrame:CGRectMake((72+20)*n,10,62,55)]; 
    } 


} 

//- (id<TapScrollViewDelegate>) delegate { 
// return (id<TapScrollViewDelegate>)super.delegate; 
//} 

//- (void) setDelegate:(id<TapScrollViewDelegate>) aDelegate 
//{ 
// super.delegate = aDelegate; 
//} 

#define GROW_ANIMATION_DURATION_SECONDS 0.15 
#define SHRINK_ANIMATION_DURATION_SECONDS 0.15 



-(IBAction)handlePanGesture:(UIPanGestureRecognizer*)recognizer 
{ 
    NSLog(@"Mouvement ok"); 
    CGPoint translation = [recognizer translationInView:self]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self]; 

} 
@end 

ответ

2

Попробуйте указать:

@interface TapScrollView : UIScrollView <UIGestureRecognizerDelegate> { 

Таким образом, ваше предупреждение должен исчезнуть, хотя я должен признать, что я не совсем понимаю, что вы пытаетесь сделать ish, поэтому могут быть и другие проблемы.

+0

Благодарим за отзыв. Он работал, хотя я не нашел таких функций в протоколе Delegate для gestureRecognizers (возможно, это ссылка на его суперкласс). –

+2

'touchesCancelled' и его семейство принадлежат' UIResponder', поэтому они уже определены для вашего производного класса прокрутки. вы можете переопределить их, конечно, как вы уже это сделали ... – sergio

Смежные вопросы