1

問題があり、ラベルを指でドラッグしたいのですが、タッチを登録することすらできません。何が問題になる可能性がありますか?selfは私のビューコントローラであり、self.labelは私のラベルです。

編集:

私のラベルは、uiimageviewを介してプログラムで作成されています。UserInteractionEnablesはYESに設定されています。何が悪いのかわかりません。コード全体を次に示します。

初期化:

  UIImage *myImage = [UIImage imageNamed:@"fish.jpg"];
    UIImageView *mainImageView = [[UIImageView alloc] initWithImage:myImage];
    self.view.frame = CGRectMake(0, 0, 320, 480);
    self.view = mainImageView;
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
    self.label.userInteractionEnabled = YES;
    self.label.text = @"Hello, World";
    [self.view addSubview:self.label];

ドラッグ:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches]anyObject];
    if([[touch view] isEqual:self.label])
    {
        NSLog(@"touch on label");

        self.startLocation = [[touches anyObject] locationInView:self.label];
        // startLocation is a CGPoint declare globaly in .h..and lblName is your UILabel
    }
}

- (void) touchesMoved:(NSSet *)touches withEvent: (UIEvent *)event
{
    UITouch *touch = [[event allTouches]anyObject];
    if([touch view] == self.label)
    {
        CGPoint pt = [[touches anyObject] previousLocationInView:self.label];
        CGFloat dx = pt.x - self.startLocation.x;
        CGFloat dy = pt.y - self.startLocation.y;
        CGPoint newCenter = CGPointMake(self.label.center.x + dx, self.label.center.y + dy);

        self.label.center = newCenter;

    }
}

編集2:私もこのコードを試しましたが、うまくいきません。問題はこれらの方法ではなく、タッチの登録にあると思います。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    self.startLocation = [[touches anyObject] locationInView:self.view];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    CGPoint point = [[touches anyObject] locationInView:self.label];
    self.label.center = CGPointMake(self.label.center.x + point.x - self.startLocation.x, self.label.center.y + point.y - self.startLocation.y);
}
4

2 に答える 2

5

Interface Builderのラベルで「UserInteractionEnabled」をチェックしてください。コードで実行している場合は、userInteractionEnabled=YES

于 2013-03-19T17:52:38.367 に答える
1

デフォルトでUILAbelは、タッチに応答しません。プロパティを有効にする必要がありuserInteractionEnabledます。

label.userInteractionEnabled = YES;
于 2013-03-19T17:53:17.277 に答える