我添加了一个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];
}
答案 0 :(得分:1)
我认为UIPanGestureRecognizer
不适用于UISwitch
。
班级参考说
UIPanGestureRecognizer是UIGestureRecognizer的具体子类 寻找平移(拖动)手势。用户必须按 视图上的一个或多个手指在它们平移时。
SO UISwitch可能因改变状态而被覆盖
我创建了一个示例应用程序
相同的代码与UILabel
代替UISwitch
效果很好。我和Abizern讨论过了。他告诉我,可能因改变状态而被覆盖。
请详细说明您需要使用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];
}
或
此链接可以帮助您