2010-10-05 65 views
4

我正在嘗試製作UIView/UIControl,用戶可以拖動並顯示文本框,然後向下拖動以隱藏它。然而,我還沒有找到一種使這種「流動」的方法 - 它似乎總是在隨機的地方停下來,並且不允許有更多的動作。目前我正在使用UIView作爲視圖的頂部,這裏是當前的代碼:CocoaTouch中的下拉菜單

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch *touch = [touches anyObject]; 

if ([touch view] == topMenuView) { 
    CGPoint location = [touch locationInView:self.superview]; 

    CGPoint locationInsideBox = [touch locationInView:self]; 

    CGPoint newLocation = location; 
    newLocation.x = self.center.x; 
    newLocation.y = newLocation.y + (self.frame.size.height - locationInsideBox.y)/2; 

    if ((self.superview.frame.size.height - newLocation.y) < (self.frame.size.height/2) && (self.superview.frame.size.height - newLocation.y) > -32) 
    { 
    self.center = newLocation; 
    } 
    return; 
} 
} 

任何幫助將不勝感激!

回答

1

我會使用平移手勢識別器。以下代碼將簡單地將視圖與用戶的手指一起上下移動。如果你想限制它移動的距離,請將它放置到位或者需要增加它的動量。

UIView * view; // The view you're moving 
CGRect originalFrame; // The frame of the view when the touch began 

- (void) pan:(UIPanGestureRecognizer *)pan { 
    switch (pan.state) { 
     case UIGestureRecognizerStateBegan: { 
      originalFrame = view.frame; 
     } break; 

     case UIGestureRecognizerStateChanged: 
     case UIGestureRecognizerStateEnded: { 
      CGPoint translation = [pan translationInView:view]; 
      CGRect frame = originalFrame; 
      frame.origin.y += translation.y; 
      view.frame = frame; 
     } break; 
    } 
} 
+0

感謝您的回覆,Cory!我目前使用「if(translation.y <(self.frame.size.height - topView.frame.size.height)&& translation.y> 0)」來限制視圖向上移動的距離。它第一次效果很好,但對於第二次,它只能根據過去的幀進行調整。有沒有辦法解決這個問題? – PF1 2010-10-31 02:46:27

0

刪除此行很可能幫助你:

newLocation.y = newLocation.y + (self.frame.size.height - locationInsideBox.y)/2; 
0

什麼你要做到的是真的沒有什麼比一個滾動的看法比較多,所以我會建議使用一個UIScrollView。

把你的UIView放在帶有透明背景的UIScrollView中,並將UIScrollView放在你的文本框上。設置正確的contentSize,你很好。

+0

的問題,這是接近的UIScrollView將不得不在「文本框」的頂部(我明白這是一個的UITextField或UITextView的 - 也許是錯誤的)。在這種情況下,需要對響應者鏈或z順序進行特殊處理。 – 2010-10-12 09:22:32

0

使用uiview動畫塊更新與接收到的觸點相對應的滑動視圖的框架。將動畫塊持續時間設置爲像.01或更低的非常短的內容。

0

我建議你兩種分裂問題:

  • 實現其在底部的文本框中的觀點 - 你只需要實現自己的自定義視圖/視圖控制器。
  • 將您的視圖添加爲UIScrollView的子視圖。

This是一個很好的教程,它演示了UIScrollView的正確初始化並在其中嵌入內容。

自定義視圖/控制器是一個更廣泛的主題:)