2011-04-19 2 views
1

나는 신참 일 뿐이며 오류가있는 것 같습니다. UIImageView를 크기 조정, 회전 및 이동하기위한 코드 조각입니다. UIImageView 이동할 수 있지만 회전 또는 UIImageView 크기를 조정하려고하면 그냥 충돌합니다. 나는 setMultipleTouchEnabled를 YES로 설정했다.오류 메시지 : "경계 1을 넘어선 색인"

충돌 때문입니다 : [NSArray objectAtIndex:]: index 1 beyond bounds [0 .. 0]

나는 오류가 텍스트의이 부분에서 생각 : 고급의

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

    NSArray *allTouches = [touches allObjects]; 

    UITouch* t; 
    if([[event allTouches] count]==1){ 
     if (CGRectContainsPoint([Birdie frame], [[allTouches objectAtIndex:0] locationInView:self.view])) { 
      t=[[[event allTouches] allObjects] objectAtIndex:0]; 
      touch1=[t locationInView:nil]; 
     } 
    }else{ 
     t=[[[event allTouches] allObjects] objectAtIndex:0]; 
     touch1=[t locationInView:nil]; 
     t=[[[event allTouches] allObjects] objectAtIndex:1]; 
     touch2=[t locationInView:nil]; 
    } 
} 

-(double)distance:(CGPoint)point1 toPoint:(CGPoint)point2 
{ 
    double deltaX, deltaY; 
    deltaX = point1.x - point2.x; 
    deltaY = point1.y - point2.y; 
    return sqrt(deltaX * deltaX + deltaY * deltaY); 
} 

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

    CGPoint currentTouch1; 
    CGPoint currentTouch2; 
    NSArray *allTouches = [touches allObjects]; 
    UITouch* t; 
    float scale,rotation; 

    if([[event allTouches] count]==1){ 
     t=[[[event allTouches] allObjects] objectAtIndex:0]; 
     if (CGRectContainsPoint([Birdie frame], [[allTouches objectAtIndex:0] locationInView:self.view])) 
     { 
      touch2=[t locationInView:nil]; 
      Birdie.center=CGPointMake(Birdie.center.x+touch2.x-touch1.x,Birdie.center.y+touch2.y-touch1.y); 
      touch1=touch2; 
     } 
    } 
    else if([[event allTouches] count]==2) 
    { 
     t=[[[event allTouches] allObjects] objectAtIndex:0]; 
     currentTouch1=[t locationInView:nil]; 

     t=[[[event allTouches] allObjects] objectAtIndex:1]; 
     currentTouch2=[t locationInView:nil]; 

     double distance1 = [self distance:currentTouch1 toPoint:currentTouch2]; 
     double distance2 = [self distance:touch1 toPoint:touch2]; 

     if (distance2 == 0) 
     { 
      //handle the case where distance is zero 
     } 
     else { 
      scale =distance1/distance2;} 

     rotation=atan2(currentTouch2.y-currentTouch1.y, currentTouch2.x-currentTouch1.x)-atan2(touch2.y-touch1.y,touch2.x-touch1.x); 
     if(isnan(scale)){ 
      scale=1.0f; 
     } 
     NSLog(@"rotation %f",rotation); 

     NSLog(@"scale %f",scale); 

     if (CGRectContainsPoint([Birdie frame], [[allTouches objectAtIndex:0] locationInView:self.view]) && 
      CGRectContainsPoint([Birdie frame], [[allTouches objectAtIndex:1] locationInView:self.view])) 
     { 

      Birdie.transform=CGAffineTransformScale(Birdie.transform, scale,scale); 
      Birdie.transform=CGAffineTransformRotate(Birdie.transform, rotation); 
     } 
     else // In case of scaling or rotating the background imageView 
     { 
      imageView.transform=CGAffineTransformScale(imageView.transform, scale,scale); 
      imageView.transform=CGAffineTransformRotate(imageView.transform, rotation); 
     } 

     touch1=currentTouch1; 
     touch2=currentTouch2; 
    } 
} 

감사합니다! 당신이 allTouches에서 실제로 두 개의 터치 개체가 있는지 확인

if (CGRectContainsPoint([Birdie frame], [[allTouches objectAtIndex:0] locationInView:self.view]) && 
      CGRectContainsPoint([Birdie frame], [[allTouches objectAtIndex:1] locationInView:self.view])) 

:이 전화를 걸

답변

4

. 당신이 Thew 보낸에있는 tableview 작업하는 경우

+0

, 대단히 감사합니다! – Tim

2

는이 설정을 기억 : 트릭이었다

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if(tableview == self.table1) 
    { 
     return [mydictionaryObject count]; 
    } 

} 
+2

'if' 조건이 false 인 경우에 또 다른'return'을 가져야합니다. –