2011-12-04 3 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를 찾지 않고 superView의 좌표계에서 변환 CGPoint를 반환하도록합니다. –

+0

예를 들어 주시겠습니까? –