2011-12-04 5 views
0

UITableViewをドラッグできるようにUIPanGestureRecognizerを使用しています。私は現在UITableView0またはその半分の幅までドラッグできないように設定しました。しかし、今度はフレームが0に設定され、UITableViewが0より大きい原点から0に戻されます。これを防ぐにはどうすればUITableViewを0に戻すことができますか?私は次のことを試しましたが、なぜこのアウトラインコードが原因であるのかはわかりません。UITableViewをドラッグする

- (void) handlePan:(UIPanGestureRecognizer *) pan { 

    CGPoint point = [pan translationInView:_tableView]; 

    CGRect frame = [_tableView frame]; 

    if (point.x <= _tableView.frame.size.width/2) { 
     frame.origin.x = point.x; 
    } 

    NSLog(@"%f : %f", frame.origin.x, _tableView.frame.origin.x); 
    //outline begin! 
    if (frame.origin.x < 0 && _tableView.frame.origin.x >= 0) { 
     frame.origin.x = 0; 
    } 
    //outline end! 
    isFilterViewShowing = frame.origin.x > 0; 

    [_tableView setFrame:frame]; 

} 

答えて

0

これは最善のコードではありませんが、それはシミュレータで動作しています。
このコードを動作させるには、インスタンス変数を追加する必要があります。
このコードは、「負の」x位置を追跡しているので、あなたが望むように正しく動作しない可能性があります。そのため、デザインの選択に応じて望ましくない可能性のある「しきい値」効果が得られます。

- (void) handlePan:(UIPanGestureRecognizer *) pan { 

if (pan.state == UIGestureRecognizerStateBegan) 
{ 
    // cache the starting point of your tableView in an instance variable 
    xStarter = _tableView.frame.origin.x; 
} 

// What is the translation 
CGPoint translation = [pan translationInView:self.tableView]; 
// Where does it get us 
CGFloat newX = xStarter + translation.x; 

CGFloat xLimit = self.tableView.superview.bounds.size.width/2; 

if (newX >= 0.0f && newX <= xLimit) 
{ 
    // newX is good, don't touch it 
} 
else if (newX < 0) 
{ 
    newX = 0; 
} 
else if (newX > xLimit) 
{ 
    newX = xLimit; 
} 

CGRect frame = self.tableView.frame; 
frame.origin.x = newX; 

[_tableView setFrame:frame]; 

if (pan.state == UIGestureRecognizerStateEnded) 
{ 
    // reset your starter cache 
    xStarter = 0; 
} 
} 

あなたはどのように[pan translationInView:aView];pan gestureはなく、画面上の指の位置のオフセットを返して気付いてもらいます。
あなたのコードが期待通りに機能しないのはこのためです。

+0

これは実際には役に立ちませんでしたが、私はsuperViewを使用しようとしましたが、触れられませんでした。私のコードがうまくいかない理由を察知できますか? –

+0

あなたのsuperViewでtouchを求めないで、 'pan'がスーパービューの座標系で翻訳CGPointを返します。 –

+0

例を挙げていただけますか? –

関連する問題