2012-09-05 3 views
0

저는 CALayer를 사용하여 내 uitableviewcells를 잘 보입니다. 나는이 방법으로이 작업을 수행하려고 해요 : 내 tableViewController의 cellForRowAtIndexPath 방법에하고 있어요UITableViewCell 용 CALayer 사용

CALayer *btnLayer = [cell layer]; 
[btnLayer setMasksToBounds:YES]; 
[btnLayer setCornerRadius:10.0f]; 

[btnLayer setBorderWidth:5.0f]; 
[btnLayer setBorderColor:[[UIColor blackColor] CGColor]]; 

CAGradientLayer *shineLayer = [CAGradientLayer layer]; 
shineLayer.frame = btnLayer.bounds; 
shineLayer.colors = [NSArray arrayWithObjects: 
        (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor, 
        (id)[UIColor colorWithWhite:1.0f alpha:0.2f].CGColor, 
        (id)[UIColor colorWithWhite:0.75f alpha:0.2f].CGColor, 
        (id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor, 
        (id)[UIColor colorWithWhite:0.3f alpha:0.4f].CGColor, 
        nil]; 
shineLayer.locations = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0f], 
         [NSNumber numberWithFloat:0.5f], 
         [NSNumber numberWithFloat:0.5f], 
         [NSNumber numberWithFloat:0.8f], 
         [NSNumber numberWithFloat:1.0f], 
         nil]; 
[btnLayer addSublayer:shineLayer]; 

. 모든 작품은 완벽하지만 셀은 훌륭하게 빛나지만 셀을 위에서 아래로 몇 번 드래그하면 위쪽과 아래쪽 셀이 다시 그려집니다. 그 후에 세포는 더 가벼워진다.

동적 셀을 사용하고 배열에서 데이터를로드합니다. 나에게 조언을 해주는 법, 올바른 방법.

감사

답변

1

내가 cellForRowAtIndexPath 방법

을 그것을하고 있어요 그러나 여러 번 호출 이후 (마다 셀로드 하거나 다시로드)는, 당신은 더 추가하는 셀에 더 많은 레이어를 적용 할 수 있습니다. 이를 방지하는 한 가지 방법은 셀을 처음 사용하는지 확인하는 것입니다.이 경우에는 을 만들고 더하기을 추가해야합니다.

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStylePlain reuseIdentifier:@"CellID"] autorelease]; 

    // ADD THE SHINE CODE HERE 
} 

// and **not** here! 

return cell; 
+0

해답을 주셔서 감사합니다.하지만이 방법으로는 작동하지 않습니다. 반짝이는 효과가 나타나지 않았습니다. –

+0

어떻게 세포를 만드나요? –

+0

내 질문에 편집 됨 –

0

오히려 일반적인있는 UITableViewCell을 사용하는 것보다, 당신은 사용자 정의 셀 서브 클래스를 생성하고의 drawRect에 효과를 추가 할 수 있습니다 그래서 당신은 당신이 dequeueable 셀에 대한 확인 같은 if 지점에있는 전체 코드를 래핑 할 수 : 방법. 당신의 코드에서 빛의 효과가 셀의 데이터에 반응 할 필요가 없다는 것을 나타내는 어떤 것도 볼 수 없으므로 셀 객체가 인스턴스화 될 때 효과를 생성 할 수 있습니다. cellForRowAtIndexPath에서 수행하는 것보다 훨씬 효율적입니다.