2009-11-20 3 views
2

그래서 반복되는 배경을 가진 UITableView를 만들려고합니다. 배경이 텍스트로 스크롤되기를 원합니다. 캐치는 배경이 2 개의 이미지라는 것입니다. 높이가 약 550 픽셀 인 상단 이미지와 높이가 2 픽셀 인 리피터 이미지가 있습니다. 상단 이미지를 테이블보기로 스크롤 한 다음 결국 상단에서 벗어나서 세그먼트 이미지가 반복됩니다. 이 뷰는 뷰 컨트롤러의 UITableView 아래에 실제로 위치합니다.UITableView 2 이미지가있는 배경 반복

여기 내 배경을 설명합니다. 테이블 스크롤이 맨 위에 스크롤 될 때 setNeedsDisplay를 호출합니다.

-(void)drawRect:(CGRect) rect 
{ 

    CGRect topRect = CGRectMake(0, _tableViewRect.origin.y, 320, min(max(0, CGImageGetHeight(top) - _tableViewRect.origin.y), _tableViewRect.size.height)); 
    CGRect segmentRect = CGRectMake(0, topRect.size.height, 320, _tableViewRect.size.height - topRect.size.height); 

    if(topRect.size.height > 0) 
    { 
     CGImageRef newImageRef = CGImageCreateWithImageInRect(top, topRect); 
     UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; 
     [newImage drawAtPoint:CGPointMake(0,0)]; 
    } 

    [[UIImage imageWithCGImage: segment] drawAsPatternInRect:segmentRect]; 
} 

작동하지만 내 3G에서 매우 추악합니다. 누구든지 최적화 팁이나 다른 방법이 있습니까?

건배

답변

2

매번 새로운 이미지를 생성하지 마십시오. UIImage를 캐쉬 한 다음, CoreGraphics 호출을 사용하여 CGContextRef의 위치를 ​​변경하여 오른쪽 영역을 가리키고 이미지를 blit하고 계속 이동하십시오. 위의 코드를 프로파일 링했다면 CGImageCreateWithImageInRect()가 사이클의 대부분을 까지 차지한다고 생각합니다.

_tableViewRect가 아닌 contentOffset을 사용해야합니다. 또한 코드를 살펴보면 위의 내용을 없애면 도움이 될 것입니다. 충분한 정보를 다시 그릴 예정이므로 충분하지 않을 수 있습니다.

//I'm not sure what _tableViewRect is, so let's just assume you've got 
//some variable, tableScrollY, that represents the scroll offset of your table 

CGContextRef  context = UIGraphicsGetCurrentContext(); 

if (tableScrollY < top.size.height) {  //okay, we need to draw at least PART of our image 
    CGContextSaveGState(context); 
    CGContextDrawImage(context, CGRectMake(0, -tableScrollY, top.size.width, top.size.height), top.CGImage); 
} 

중간 코드의 경우 (...) 부분을 대체한다 : 즉 여기서 일 수있는 코드 조각입니다 말했다. 이것은 테스트되지 않았으므로 약간 futz해야 할 수도 있습니다.

+0

오케이. 가장 좋은 방법은 무엇입니까. 그게 내가하고 싶었지만 실제로 아무것도 찾을 수 없었습니다. – Meroon

+0

CGContextRef 문서 (http://developer.apple.com/mac/library/DOCUMENTATION/GraphicsImaging/Reference/CGContext/Reference/reference.html), 특히 CGContextDrawImage를 확인하십시오. .CGImageRef 속성을 사용하여 UIImage에서 CGImageRef를 얻을 수 있음을 기억하십시오. –

+0

올바르게 블리치하는 방법을 알아 내는데 어려움이 있습니다. 이 문제를 논의하는 기사로 나를 안내 할 수 있습니까? 아니면 코드가 있습니까? 도와 주셔서 정말 고맙습니다. – Meroon

관련 문제