UipanGesture 不适用于 Uiswitch

Posted

技术标签:

【中文标题】UipanGesture 不适用于 Uiswitch【英文标题】:UipanGesture is not working on Uiswitch 【发布时间】:2012-08-15 10:02:37 【问题描述】:

我添加了一个 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 没有被调用..

下面是切换拖拽功能

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

【问题讨论】:

能看到labelDragged: 的定义吗? 我已经添加了定义,请检查 我个人从来没有用过这个..但是你可以看这里..***.com/a/6687064/919545希望这会有所帮助 【参考方案1】:

我认为UIPanGestureRecognizer 不适用于UISwitch

类参考说

UIPanGestureRecognizer 是 UIGestureRecognizer 的具体子类 寻找平移(拖动)手势。用户必须按 当他们平移视图时,一根或多根手指在视图上。

所以 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];

此链接可能对您有所帮助

Draggable Buttons and Labels

【讨论】:

如果是这种情况,那么将开关放在 UIView 中并将 UIPanGesture 添加到它应该可以工作.. @AnkitSrivastava:我也添加了.. :) 嗨 ramshad 你能解决我的这个问题吗?我将非常感激***.com/questions/11975022/… 是的..我要发布答案..在此之前,如果我的解决方案有效,您可以通过勾选勾选符号来接受我的答案(显示我的答案的左上角或上方-投票)

以上是关于UipanGesture 不适用于 Uiswitch的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 中的 UIPanGesture

忽略 UIViewController 中的 UIPanGesture

仅在 iPhone 上水平添加 UIPanGesture

使用自动布局约束时,UIView 无法通过 UIpangesture 顺利拖动

滚动视图滚动时如何调用 uipangesture?

点击单元格时从 uitableviewcell 类调用 uipangesture