2011-03-10 78 views
1

我一直在試圖建立一個自定義的uitableview刷卡。我在這方面取得了成功。我還想在遇到touchesMoved時將uiview作爲子表格的子視圖添加到表格單元格中。當我試圖移動桌面單元時,我想要將uiview附加到靜止的位置。爲此,我也使它向opp方向移動(如StackOverflow中的答案中的建議)。但它並不是固定的。子視圖也隨着細胞移動。請幫我弄清楚我哪裏出錯了?代碼如下:保持子視圖靜止,而超視圖正在移動

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
UITableViewCell * cell = (UITableViewCell *)[self cellForRowAtIndexPath:[self indexPathForRowAtPoint:gestureStartPoint]]; 
isTouchesMoved=YES; 

if ([self supportsSwipingForCellAtPoint:gestureStartPoint]) 
{ 

    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(highlightTouchedRow) object:nil]; 

    UITouch * touch = [touches anyObject]; 
    CGPoint currentPosition = [touch locationInView:self]; 
    CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); 
    CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); 
    if (deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) 
    { 
     tempView=[self addnewViewatPoint:touches withEvent:event]; 
     [cell addSubview:tempView]; 
     [self setScrollEnabled:NO]; 
     CGPoint loc = [touch locationInView:self]; 
     CGPoint prevloc = [touch previousLocationInView:self]; 
     if(moved==TRUE) 
     { 
      prevLoc=cell.frame; 
      prevLocBack=tempView.frame; 
      moved=FALSE; 
     } 
     CGRect myFrame = cell.frame; 
     CGRect backFrame = tempView.frame; 
     CGFloat deltaX = loc.x - prevloc.x; 
     if(gestureStartPoint.x>currentPosition.x) 
     { 
      NSLog(@"You have swiped left"); 
      CGFloat movedDistance=gestureStartPoint.x-currentPosition.x; 
      NSLog(@"The movedDistance is %f",movedDistance); 
      if(movedDistance<=160) 
      { 
       myFrame.origin.x += deltaX; 
       backFrame.origin.x-=deltaX; 
       NSLog(@"The backgroundViewframe position, frameposition is %f and %f",fabsf(backFrame.origin.x),fabsf(myFrame.origin.x)); 
      } 
      [tempView setFrame:backFrame]; 
      [cell setFrame:myFrame]; 

     } 
     else 
     { 
      NSLog(@"You have swiped right"); 
      CGFloat movedDistance=currentPosition.x-gestureStartPoint.x; 
      NSLog(@"The movedDistance is %f",movedDistance); 
      if(movedDistance<=160) 
      { 
      myFrame.origin.x += deltaX; 
          backFrame.origin.x-=deltaX; 
      } 
      [cell setFrame:myFrame]; 
     } 
     if ([swipeDelegate respondsToSelector:@selector(tableView:didSwipeCellAtIndexPath:)]) 
     { 
      [swipeDelegate tableView:self didSwipeCellAtIndexPath:[self indexPathForRowAtPoint:gestureStartPoint]]; 
     } 

     [self setIndexOfVisibleBackView:[self indexPathForCell:cell]]; 
    } 

    [self setScrollEnabled:YES]; 

} 
else 
{ 
    [super touchesMoved:touches withEvent:event]; 
} 
} 


-(UIView *) addnewViewatPoint:(NSSet *)touches withEvent:event 
{ 

UIView *backgroundView=[[[UIView alloc] initWithFrame: CGRectMake(10.0, 30.0, 200.0, 25.0)] autorelease]; 
[backgroundView setBackgroundColor:[UIColor redColor]]; 
[backgroundView setUserInteractionEnabled:NO]; 
backgroundView.tag=101; 
return backgroundView; 
} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
if ([self supportsSwipingForCellAtPoint:gestureStartPoint]) 
{ 
    TISwipeableTableViewCell * cell = (TISwipeableTableViewCell *)[self cellForRowAtIndexPath:[self indexPathForRowAtPoint:gestureStartPoint]]; 
    if(isTouchesMoved==NO) 
    { 
     [self.delegate tableView:self didSelectRowAtIndexPath:[self indexPathForCell:cell]]; 
     [self touchesCancelled:touches withEvent:event]; 
    } 

    [UIView beginAnimations:nil context:NULL]; 
    if(isTouchesMoved==YES) 
    { 
     [cell setFrame:prevLoc]; 
     [tempView setFrame:prevLocBack]; 
     isTouchesMoved=NO; 
    } 
    moved=TRUE; 
    [UIView commitAnimations]; 
    [self touchesCancelled:touches withEvent:event]; 
    //[super touchesEnded:touches withEvent:event]; 
} 
else 
{ 
    [super touchesEnded:touches withEvent:event]; 
} 

}

+0

有很多代碼供人閱讀和調試。嘗試將其分解成真正重要的部分。嘗試隔離問題。 – Robert 2011-03-10 20:43:20

回答

0

你能不能添加需要被固定到下表視圖中的UIView?

+0

非常感謝...它爲我工作...我在UITableview單元格中添加了2個視圖,並且最初使其隱藏了一個視圖(這是靜止的)並且其他視圖具有其內容。當遇到touchesbegan時,我使靜態視圖可見,並移動包含內容的視圖的框架。它工作真的很棒。非常感謝!!! – jeevangs 2011-03-14 17:56:40

相關問題