在ScrollView中使用GestureRecognizer激活UIImageView

时间:2012-06-24 09:18:50

标签: iphone uiscrollview uiimageview uigesturerecognizer

我,

我目前正在尝试在ScrollView中实现Gesture识别器。

我首先创建了一个自定义ScrollView,其中我集成了ImageView对象。

当用户点击ImageView时,通常会激活PanGestureRecognizer,ImageView对象会跟随屏幕上的移动。

我已经阅读并遵循了Gesture Recognizer和Raywenderlich博客上的说明(这是非常好的)。

如果有人知道我的代码中缺少什么,我很乐意阅读它

提前感谢。这是我的代码

#import <Foundation/Foundation.h>
#import "mainInterface03.h"
#import <QuartzCore/QuartzCore.h>
#import "boutonHome.h"
#import "DragGestureRecognizer.h"

@class boutonHome;
@class DragGestureRecognizer;

@interface TapScrollView : UIScrollView {

   // id<TapScrollViewDelegate> delegate;
    NSMutableArray *classementBoutons;
    int n;
    int o;
    UIView *bouton01;

}

@property (nonatomic, retain) UIView *bouton01;

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;

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

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


@end

m.file

#import "TapScrollView.h"


@implementation TapScrollView


@synthesize bouton01;


- (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*i+20,10,62,55)];
        [classementBoutons insertObject:bouton atIndex:i];
        [self addSubview:bouton];
        }

        UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:bouton01 action:@selector(handlePanGesture:)];
        [bouton01 addGestureRecognizer:recognizer];

}
- (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]) 
    {
    bouton01 = [self viewWithTag:o];
    }
    }

    return;
}



-(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

1 个答案:

答案 0 :(得分:0)

我不确定此设置是否可行。基本上,您将所有已触摸的视图分配给带有手势识别器的bouton01。对我来说似乎有点费解,而且你的代码效率也不高。

看来,当你致电[super touchesBegan:touches withEvent:event];时,它会通过触摸视图层次结构。只有在那之后才能将作业分配到bouton01。因此,bouton01永远不会收到触摸事件似乎是合乎逻辑的。

实际上,正是因为这种奇怪的方法迭代了视图并将其分配给具有此错误产生的识别器的视图。我建议在安装过程中为所有相关视图分配相同的识别器。