UITableViewCell的初始x坐标是多少?

时间:2014-05-13 15:35:17

标签: ios objective-c uitableview

UITableViewController中,此函数会在控制台中记录tableview单元格的x坐标

- (void)tableView:(UITableView *)tableView 
  willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1. Setup the CATransform3D structure
    CATransform3D rotation;
    rotation = CATransform3DMakeRotation( (45.0*M_PI)/180, 0.0, 0.7, 0.4);
    rotation.m34 = 1.0/ -600;


    //2. Define the initial state (Before the animation)
    cell.layer.shadowColor = [[UIColor blackColor]CGColor];
    cell.layer.shadowOffset = CGSizeMake(10, 10);
    cell.alpha = 0;

    cell.layer.transform = rotation;
    cell.layer.anchorPoint = CGPointMake(0, 0.5);

    //4. Define the final state (After the animation) and commit the animation
    [UIView beginAnimations:@"rotation" context:NULL];
    [UIView setAnimationDuration:0.3];
    cell.layer.transform = CATransform3DIdentity;
    cell.alpha = 1;
    cell.layer.shadowOffset = CGSizeMake(0, 0);
    [UIView commitAnimations];
    NSLog(@"X%d= %d,Y%d=%d",(int)indexPath.row ,(int)cell.layer.position.x,(int)indexPath.row,(int)cell.layer.position.y);
}

记录最初显示的单元格(单元格0到12)

X0= 160,Y0=25
X1= 160,Y1=75
X2= 160,Y2=125
X3= 160,Y3=175
X4= 160,Y4=225
X5= 160,Y5=275
X6= 160,Y6=325
X7= 160,Y7=375
X8= 160,Y8=425
X9= 160,Y9=475
X10= 160,Y10=525
X11= 160,Y11=575
X12= 160,Y12=625

但在滚动tableview后,它会记录

X13= 0,Y13=675
X14= 0,Y14=725
X15= 0,Y15=775
X16= 0,Y16=825

并且在模拟器中只有单元格13的视图偏移160

这可以通过添加到上一个方法

来解决
if(cell.layer.position.x != 0){
    cell.layer.position = CGPointMake(0, cell.layer.position.y);
}

我要问的是为什么最初x坐标= 160 ???

1 个答案:

答案 0 :(得分:0)

图层的位置表示其中心位置,而不是左上角。你通过操纵anchorPoint属性改变了这种行为。在包含anchorPoint的行后面插入以下行:

cell.layer.position = CGPointMake(0, cell.layer.position.y);

更改anchorPoint也会更改frame。要保持frame相同,您必须使用position属性进行相反的移动。

(要获取左上角的位置,请改用cell.frame.origin。)

另请参阅:CALayer reference