4

나는 꽤 오랫동안이 일에 매달려왔다. 나는 많은 다른 해답을 보았고 또한 애플의 예를 살펴 보았다.UIScrollView의 큰 이미지 확대 및 스크롤

내가 알고 싶은 것은 UIScrollView에서 큰 이미지를로드하고 페이지를 통해 페이지를보고 사진 앱처럼 확대 할 수 있어야한다는 것입니다.

큰 이미지를 스크롤해야하는 앱 (크기가 1024 x 1024 이상인 이미지를 의미 함)에서 작업하고 있습니다. 이미 사진 앱과 비슷한 것을 구현했습니다. 그러나 이제는 큰 이미지를 사용하기 때문에 메모리 경고 등이 발생합니다. 나는 왜 내가 경고를 받고 있는지 알고있다. 나는 내가해야한다고 안다. 타일을 붙인다..

Apple의 예제는 이미 존재하는 작은 이미지로 타일링하는 것을 보여줍니다. 내 응용 프로그램은 여러 이미지를 다운로드하여 디스크에 저장하므로 사용자는 나중에 이미지를 볼 수 있습니다. 따라서 다른 프로그램을 사용하여 이미지를 잘라낼 수 없습니다.

전체 크기의 이미지를 바꿀 수있는 무언가가 필요합니다. 어떤 도움이라도 대단히 감사하겠습니다. 또한 앞에서 언급했듯이 타일을 사용하여 무언가를해야한다는 것을 알고 있습니다. 그러나 저는이 문제에 익숙하지 않으며, 답변에 시작 지점으로 사용할 수있는 몇 가지 샘플 코드가 포함되어 있으면 크게 감사하겠습니다.

나는 다른 질문을 봤는데, 아무도 내 만족으로 대답 한 것 같지 않아서, 나는이 질문을 다시하고있다.

다시 한번 감사드립니다!

답변

3

바둑판 식으로 작업하려면보기에서 CaTiledLayer를 사용해야합니다. 그것으로 인터넷 검색을하면 좋은 정보를 얻을 수 있습니다. 기본적으로 UIVIew가이를 사용하고 확대/축소를위한 세부 수준을 선언하고 drawRect에서 각 타일을 rect 매개 변수로 받도록 선언합니다. 타일 ​​

이미지하는있는 UIImage에서 부하 (이것은 메모리를 사용하지만, 매우 적은 그것을 보여주는 것보다)과 같은 것을 할 각 타일에 사용 :

UIGraphicsBeginImageContextWithOptions(tileSize, YES, 1); 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(ctx, -tileSize.width * columnNumber, -tileSize.height*rowNumber); 
[img drawInRect:CGRectMake(0, 0, tileSize.width, tileSize.height)]; 
UIImage* imgCut = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

및 imgCut을 저장합니다. CATiledLayer에서 다른 수준의 세부 묘사를 사용하면 다른 줌으로 타일링을 생성하는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다. :) 그래서, 내가 올바르게 얻는다면 UIView 하위 및 UIImage ('img' 변수) 전달하십시오. 이 UIView가 Apple의 PhotoScroller 앱에서 TilingView와 같다고 가정하면,'- (UIImage *) tileForScale : (CGFloat) scale 행에 코드를 넣으면 : (col) row col : (int) col' 메소드가 애플의 PhotoScroller 애플 리케이션, 내 이미지의 타일 버전을 얻을 것인가? – codeBearer

+0

이미지를 보여주기 전에 타일을 생성하여 캐시 디렉토리에 보관하는 것이 좋습니다. 따라서 이미지를 만든 후에 큰 이미지를 해제하면 모든 타일을 준비 할 수 있습니다. 그 예제에 대해서는 모르겠지만,이 메소드는 행, 열 및 축척에 적합한 타일 이미지를 리턴하므로 작동해야합니다. – Luis

+0

그래서 타일을 만들 필요가 있습니다. 화면에 이미지를로드하려고 할 때 이미지 다운로드를 완료하거나 비동기 적으로 완료합니까? – codeBearer

관련 문제