2013-02-19 2 views
2

앱의 Facebook 피드를 복제하려고하는데 표시 할 이미지가 있습니다. 이미지는 다양한 크기가 될 것이므로 이상하게 보지 않고 어떻게 셀에 맞게 적절하게 스케일해야합니까?iOS - 페이스 북의 뉴스 피드와 같이 다양한 이미지 크기로 UIButton을 올바르게 스케일하는 방법은 무엇입니까?

셀에 이미지 세트가있는 UIButton이 있습니다. 버튼을 눌렀을 때 전체 크기 이미지를 열고 싶을 때 버튼을 사용하고 있습니다. 탭 제스처를 사용하여 UIImageView로 변경하는 것이 더 좋다면 버튼을 더 간단하게 만든다고 생각할 수도 있습니다.

아이디어가 있으십니까?

+0

실제로 Facebook의 뉴스 피드를 읽으면서 또는 비슷한 모양을 원하십니까? – lnafziger

+0

아니요, Facebook의 데이터를 읽지 않습니다.내 뉴스 피드 테이블을 흉내내어 내 맞춤 데이터를 표시합니다. 그러나 나는 "이미지 셀"이 얼마나 깨끗한지를 좋아하고 전체 크기의 이미지를 가져 오기 위해 이미지를 클릭 할 수있게하면서 그 이미지를 모방하려고합니다. – JimmyJammed

답변

0
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext(); 
return newImage; 

}

사용이 크기에 따라 이미지 크기를 조정합니다.

+0

이것은 간단한 방법이지만 몇 가지 잠재적 인 문제가 있습니다. 1) 이미지의 종횡비가 유지되지 않습니다. 2) 생성 된 UIImage를 디스크에 저장하면 (예를 들어 섬네일을 캐시하기 위해) 스케일 된 이미지가 아니라 전체 해상도의 이미지가 저장됩니다. – lnafziger

+0

[this] (http://stackoverflow.com/questions/5545600/iphone-cgcontextref-cgbitmapcontextcreate-unsupported-parameter-combination)에서 사용 된 방법을 시도하십시오. 또한 Interpolationlevel을 컨텍스트로 설정하십시오. – kaar3k

0

이러한 이미지를 표시하려면 UITableView을 사용한다고 가정합니다.

행이로드 될 때 이미지의 크기가 조정되고 너무 많은 처리 시간이 소요되어 스크롤이 원활하지 않기 때문에 테이블 뷰를 스크롤 할 때 문제가 발생합니다.

  1. 그런 식으로하면 전체 크기의 이미지를 만들 때 적절한 크기되는 이미지를 생성하고 디스크에 저장 :

    이 약 2 가지 방법이 있습니다. 정적 사진 인 경우 이미지 편집 프로그램 (예 : Photoshop)에서 미리보기 이미지를 만들고 전체 해상도 사진과 함께 포함합니다. 사진이 동적으로 다운로드/생성되는 경우 전체 크기 이미지를 저장할 때 더 작은 버전을 만들어야합니다. 이것은 실제로 들리는 것보다 더 복잡하며, 이것이 필요한 경로라면 몇 가지 코드를 제공 할 수 있습니다. 요점은 시간의을 저장하면서 테이블 뷰 행이로드되는 동안 이미지의 크기를 조정할 필요가 없다는 것입니다.

  2. 백그라운드 스레드에서 이미지 크기를 조정하고 처리가 완료되면 테이블 뷰 행에 추가하십시오. 이 주위에 애플의 다음 예제 프로젝트를 포함하여,이 일의 수많은 예 : https://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

최상의 성능이 두 가지를 모두 수행하는 것입니다,하지만 내 경험에서, 하나 또는 다른 하나는 정말 필요합니다.

0

UIImageView의 기본 제공 함수를 통해 모든 이미지 크기 조정을 처리 한 다음 동일한 크기 (프레임) 인 투명 버튼을 그 위에 놓아야하는 이유는 무엇입니까? (* UIButton을 배경색을 지우고 버튼 유형을 Custom (기본값은 반올림 된 것으로 생각합니다.)

투명한 UIButton을 이미지 위에 두지 않고 UIImageView에서 클릭을 감지하고 싶다면 touchesBegan 귀하의 배열에 UIImage에 터치가 있었는지 감지하십시오.

0

[CGAffineTransformMakeScale][1]은 Quartz 2D 프레임 워크에서보기를 매우 쉽게 스케일 할 수 있습니다.

#define X_SCALE_FACTOR 2.5 
#define Y_SCALE_FACTOR 2.5 
UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"myimage.png"]]; 
imageView.transform = CGAffineTransformMakeScale(X_SCALE_FACTOR, Y_SCALE_FACTOR); 
관련 문제