0

オブジェクトをタップできるようにジェスチャーを UIView に接続しようとしていますが、機能していません。私は何を間違っていますか?

シェイプ.h

#import <UIKit/UIKit.h>

@interface Shape : UIView; 

- (id) initWithX: (int)xVal andY: (int)yVal;

@end

形状.m

#import "Shape.h"

@implementation Shape 

- (id) initWithX:(int )xVal andY:(int)yVal {
    self = [super init];    
    UIView *shape = [[UIView alloc] initWithFrame:CGRectMake(xVal, yVal, 10, 10)];
    shape.backgroundColor = [UIColor redColor];
    shape.userInteractionEnabled = YES;     
    [self addSubview:shape];
    return self;
}

@end

変更されたコード: 次のコードは、メインの ViewController にあります。Shape クラスから UITapGestureRecognizer を削除しました。次の変更を行うとコードは機能しますが、タップ ジェスチャに応答するのは「形状」ではなく「ボックス」です。[box addGestureRecognizer:tap] に;

- (void)handlerTap:(UITapGestureRecognizer *)recognizer {
    //CGPoint location = [recognizer locationInView:[recognizer.view superview]];
    NSLog(@"Success");
}
-(void)drawShapes{
    NSLog(@"Draw");
    if(!box){
        box = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight-100)];
        box.backgroundColor = [UIColor colorWithRed: 0.8 green: 0.8 blue: 0.0 alpha:0.2];
        [self.view addSubview:box];
    }
    for (int i = 0; i<5; i++) {
        int x = arc4random() % screenWidth;
        int y = arc4random() % screenHeight;
        Shape * shape =[[Shape alloc] initWithX:x andY:y ];
        [box addSubview:shape];
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
        [tap setNumberOfTapsRequired:1];
        [tap addTarget:self action:@selector(handlerTap:)];
        [box addGestureRecognizer:tap];     
    }
}

解決策: self = [super init]; であることを学びました。*shape が配置されるビューの境界を定義する CGRECT を含めるように変更する必要があります。self = [super initWithFrame:CGRectMake(xVal, yVal, 10, 10)];

また、親内での正しい配置を保証するために、*shape を 0,0 に配置する必要があります。UIView *shape = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];

#import "Shape.h"

@implementation Shape 

- (id) initWithX:(int )xVal andY:(int)yVal {
    self = [super initWithFrame:CGRectMake(xVal, yVal, 10, 10)];    
    UIView *shape = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
    shape.backgroundColor = [UIColor redColor];
    shape.userInteractionEnabled = YES;     
    [self addSubview:shape];
    return self;
}
@end
4

1 に答える 1

2

メソッドをクラスにself実装したため、ジェスチャ レコグナイザーのターゲットをビューではなく に設定する必要があります。handlerTap:Shape

于 2012-06-04T13:28:36.747 に答える