2011-09-15 3 views
0

나를 용서해주십시오.UIView 배열로 UIScrollView 레이어의 UIView 터치 감지

MoveMe 예제와 같은 터치를 감지하려고합니다. UIViews (studentCell)의 배열이 studentCellArray라는 NSMutableArray에 배치되어 있습니다.

[self.studentCellArray addObject:self.studentCell]; 

내가 원터치있을 때 나는 그것이 배열의 UIViews 중 하나를 만진 알고 똑똑 프로그램을 만들고 싶어하고있는 경우 다음 뭔가를 할 수 있습니다.

다음은 touchesBegan : 메소드의 코드입니다.

//prep for tap 
int ct = [[touches anyObject] tapCount]; 
NSLog(@"touchesBegan for ClassRoomViewController tap[%i]", ct); 
if (ct == 1) { 
    CGPoint point = [touch locationInView:[touch view]]; 
    for (UIView *studentCard in self.studentCellArray) { 
     //if I Touch a Card then I grow card... 

    } 
    NSLog(@"I am here[%@]", NSStringFromCGPoint(point)); 
} 

뷰에 액세스하고 터치하는 방법을 모르겠습니다.

답변

1

배열의 각 UIView에 UIPanGestureRecognizer를 할당하여이 문제를 "해결"했습니다.

이 방법을 사용하는 것이 최선의 방법은 아니지만 화면에서 이동할 수 있습니다.

다음
for (int x = 0; x < [keys count]; x++) { 
       UIPanGestureRecognizer *pGr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragging:)]; 
       UIView *sca = [self.studentCellArray objectAtIndex:x]; 

       [sca addGestureRecognizer:pGr]; 
       [pGr release]; 
      } 

내가 사용하는 "드래그"방법 : 여기

는 코드입니다. 나는 세 번째로 화면을 나누었고, 임계점을 넘기면 UIView를 점으로 스냅하는 애니메이션이 있습니다. 나는 이것이 누군가에게 좋은 아이디어를주기를 바란다. 더 좋은 방법이 있다면 도움을주십시오.

- (void) dragging:(UIPanGestureRecognizer *)p{ 
UIView *v = p.view; 

if (p.state == UIGestureRecognizerStateBegan || p.state == UIGestureRecognizerStateChanged) { 
    CGPoint delta = [p translationInView:studentListScrollView]; 
    CGPoint c = v.center; 
    c.x += delta.x; 
    //c.y += delta.x; 
    v.center = c; 
    [p setTranslation:CGPointZero inView:studentListScrollView]; 

} 
if (p.state == UIGestureRecognizerStateEnded) { 
    CGPoint pcenter = v.center; 
    //CGRect frame = v.frame; 
    CGRect scrollFrame = studentListScrollView.frame; 
    CGFloat third = scrollFrame.size.width/3.0; 
    if (pcenter.x < third) { 
     pcenter = CGPointMake(third/2.0, pcenter.y); 
     //pop the view 
     [self showModalDialog:YES perfMode:YES andControlTag:[studentCellArray indexOfObjectIdenticalTo:p.view]]; 
    } 
    else if (pcenter.x >= third && pcenter.x < 2.0*third) { 
     pcenter = CGPointMake(3.0*third/2.0, pcenter.y); 

    } 
    else 
    { 
     pcenter = CGPointMake(5.0 * third/2.0, pcenter.y); 
     //pop the view 
     [self showModalDialog:YES perfMode:YES andControlTag:[studentCellArray indexOfObjectIdenticalTo:p.view]]; 
    } 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.2]; 
    v.center = pcenter; 
    [UIView commitAnimations]; 
} 

}

편집 : 추가 [studentCellArray indexOfObjectIdenticalTo : p.view]를 andControlTag에 그래서 내가 제시 내 모달 대화 상자에서 그것을 전달할 수 있습니다 만진 나에게보기의 배열의 위치를 ​​제공합니다 적절한 정보.