1

uiswitch を追加しましたが、ジェスチャーで別の位置に移動したいと考えています。しかし、uipangestureはuiswitchで動作していません..以下は私のコードです

    UISwitch *swich = [[UISwitch alloc]initWithFrame:CGRectMake(20, 20, 40, 50)];

    swich.userInteractionEnabled = YES;

    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] 
                                       initWithTarget:self 
                                       action:@selector(switchdraged:)];
    [swich addGestureRecognizer:gesture];

    [self.view addSubview:swich];

関数 switchdraged が呼び出されていません..

以下は switchdraged 関数です

- (void)switchdraged:(UIPanGestureRecognizer *) gesture1
{
        UISwitch *swich = (UISwitch *)gesture1.view;
        CGPoint translation = [gesture1 translationInView:swich];
        swich.center = CGPointMake(swich.center.x + translation.x, 
                                swich.center.y + translation.y);
        // reset translation
        [gesture1 setTranslation:CGPointZero inView:swich];
}
4

1 に答える 1

1

UIPanGestureRecognizerでは動作しないと思いますUISwitch

クラスリファレンスは言う

UIPanGestureRecognizer は、パン (ドラッグ) ジェスチャを探す UIGestureRecognizer の具体的なサブクラスです。ビューをパンしている間、ユーザーはビューを 1 本以上の指で押している必要があります。

SO UISwitch はおそらく状態を変更するためにオーバーライドされます

サンプルアプリケーションを作成しました

UILabelの代わりに同じコードがうまく機能しますUISwitch。アビゼルンと話し合いました。彼は、状態を変更するためにおそらくオーバーライドされていると私に言いました。

UISwitchで何をする必要があるかをよく説明してください。

この方法はあなたを助けるかもしれません

1.ビュー内にスイッチを作成し、サブビューとして追加

- (void)viewDidLoad
{  

    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];  
    containerView.backgroundColor = [UIColor blackColor];
    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] 
                                       initWithTarget:self 
                                       action:@selector(switchdraged:)];
    [containerView addGestureRecognizer:gesture];


    UISwitch *swich = [[UISwitch alloc]initWithFrame:CGRectMake(20, 20, 40, 50)];    
    swich.userInteractionEnabled = YES;



    [containerView addSubview:swich];    

    [self.view addSubview:containerView];
    [self.view bringSubviewToFront:containerView];


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (void)switchdraged:(UIPanGestureRecognizer *) gesture1
{
    NSLog(@"triggered");

    UIView *swich = (UIView *)gesture1.view;
    CGPoint translation = [gesture1 translationInView:swich];
    swich.center = CGPointMake(swich.center.x + translation.x, 
                               swich.center.y + translation.y);
    // reset translation
    [gesture1 setTranslation:CGPointZero inView:swich];
}

また

このリンクはあなたを助けるかもしれません

ドラッグ可能なボタンとラベル

于 2012-08-15T11:43:44.783 に答える