我在我的主視圖中有一個滾動視圖,我有三個子視圖在我的滾動視圖。我的所有子視圖都有UIButtons。在UIScrollView中拖動UIButtons?
現在,我想將這些按鈕從一個子視圖拖動到另一個子視圖(拖動按鈕時,滾動視圖不應該滾動)。
我該怎麼做?
我在我的主視圖中有一個滾動視圖,我有三個子視圖在我的滾動視圖。我的所有子視圖都有UIButtons。在UIScrollView中拖動UIButtons?
現在,我想將這些按鈕從一個子視圖拖動到另一個子視圖(拖動按鈕時,滾動視圖不應該滾動)。
我該怎麼做?
我不能完全肯定,如果這個片段適用於這種特殊情況下(一個UIScrollView內的UIControl),但我UIResponder鏈的理解暗示我應該:)
- (void)viewDidLoad { // or wherever you initialize your things
...
// Add swipe event to UIButton so it will capture swipe intents
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] init];
[panGR addTarget:self action:@selector(panEvent:)];
[button addGestureRecognizer:panGR];
[panGR release];
}
- (void)panEvent:(id)sender {
button.center = [sender locationInView:self.view];
}
如果這個工程(現在不能測試它,但它在類似的情況下也適用於我),那麼你應該添加更多的代碼來處理拖放相關事件(也許在UIScrollView中禁用Clip Subviews選項,將按鈕添加到新的如果位置與目的地的CGRect相交,則返回superview,如果沒有,則將按鈕返回到原始位置等)。
那麼,這些行中發生了什麼?當您開始觸摸UIButton時,由於該事件可能會作爲觸摸事件(由UIButton處理)或作爲泛事件(由UIScrollView處理),因此該命令不會進入UIScrollView。當你移動你的手指時,這個事件被UIButton的響應者解散,因爲沒有Gesture Recognizer知道如果手指移動如何繼續。
但是,當您將手勢識別器添加到實際知道在手指移動時要做什麼的UIButton中時,一切都不一樣:UIButton不會忽略該事件,並且UIScrollView永遠不會意識到存在觸摸移動超過它。
我希望我的解釋是準確和足夠的。讓我知道,如果a)它不工作或b)有什麼不清楚。
祝你好運:)
Try
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (allowAppDrag && [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
return NO;
}
return YES;
}
感謝ü這麼多,你的善良help.Button移動finely.At同時, 我只想分配確切點button.center,爲了執行準確的移動,我需要使用touchesBegan,touchesMoved,touchesEnded.While使用這種方法,觸摸功能不起作用..... 如何做到這一點? – user1048990
當開始使用touchesBegan,Moved和Ended時,您將忽略所有手勢和響應者鏈功能。藉助UIPanGestureRecognizer,您可以使用locationInView訪問觸摸的確切位置,該位置返回與您作爲參數傳遞的視圖相關的CGPoint(本例中爲主視圖)。不適合你的情況? –