【发布时间】:2013-09-27 13:30:19
【问题描述】:
我已经在 ViewController 中实现了一个可拖动的 UIButton。除了这个可拖动的按钮之外,我还有两个 UIButtons,当我将一个按钮拖到它们上面并更改静态按钮的标题时,它们应该被检测到。我怎样才能做到这一点?
这就是可拖动按钮的实现方式。
@interface ButtonAnimationViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *firstButton; // dragable button
@property (weak, nonatomic) IBOutlet UIButton *oneButton; //normal button
@property (weak, nonatomic) IBOutlet UIButton *twoButton; // normal button
@implementation ButtonAnimationViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.firstButton];
[self.view addSubview:self.oneButton];
[self.view addSubview:self.twoButton];
UIPanGestureRecognizer *panGesture
= [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragging:)];
[self.firstButton addGestureRecognizer:panGesture];
UITapGestureRecognizer *tapGesture
= [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dropping:)];
tapGesture.cancelsTouchesInView = NO;
[self.oneButton addGestureRecognizer:tapGesture];
[self.twoButton addGestureRecognizer:tapGesture];
-(void)dragging:(UIPanGestureRecognizer*)panGesture {
if (panGesture.view != self.firstButton)
{
return;
}
if (panGesture.state == UIGestureRecognizerStateBegan ||
panGesture.state == UIGestureRecognizerStateChanged)
{
CGPoint delta = [panGesture translationInView:self.view];
CGPoint center = self.firstButton.center;
center.x += delta.x;
center.y += delta.y;
self.firstButton.center = center;
[panGesture setTranslation:CGPointZero inView:self.view];
}
if (panGesture.view == self.oneButton) {
// I tried this to change the button title.
NSString *buttonTitle = self.firstButton.titleLabel.text;
self.oneButton.titleLabel.text = buttonTitle;
return;
}
//if (panGesture.state == UIGestureRecognizerStateEnded) {
// self.firstButton.center = center;
//[panGesture setTranslation:CGPointZero inView:self.view];
}
【问题讨论】:
-
我会使用 CGRectIntersectsRect(, ) 来解决这个问题。使用 panGesture.view 和 self.oneButton 和 self.twoButton。
-
另外这段代码没有多大意义。平移手势仅与 firstButton 相关联。最初的检查永远不会是真的,最后的检查也不会。 (即 if (panGesture.view != self.firstButton) 和 if (panGesture.view == self.oneButton))
-
还要在drop的时候做点什么,尝试捕捉UIGestureRecognizerStateEnded状态。
标签: ios objective-c uibutton