2011-07-29 8 views
0

다음 작업을 수행하는 방법을 알아 내려고합니다.이미지가있는 iphone SDK 버튼

기본 모양 대신 이미지가있는 단추가 있습니다. 사용자가 버튼을 클릭하고 이미지 선택기를 사용하여 사진을 선택합니다. 사용자가 클릭 한 사진으로 사진의 이미지를 설정하고 싶습니다.

그래서, 나는 다음을 수행하십시오

[self.activeBtn setImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"] forState:UIControlStateNormal]; 

불행하게도,이 작은 상자에 이미지를 확장 할 수 있습니다. 버튼의 테두리가 확대되지 않고 이미지가 자르도록하는 가장 좋은 방법은 무엇입니까?

편집 : 현재 시뮬레이터에 있음을 알고 싶습니다.

답변

1

당신은 인수로

- (UIImage*)thumbnailOfHeight:(int)height andWidth:(int)width fromImage:(UIImage*)image{ 
    UIImage *thumbnail; 

    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];         

    BOOL isWidthGreaterThanHeight = (image.size.width > image.size.height); 
    float sideFull = (isWidthGreaterThanHeight)? image.size.height : image.size.width; 

    CGRect clippedRect = CGRectMake(0, 0, sideFull, sideFull); 

    UIGraphicsBeginImageContext(CGSizeMake(height, width)); 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    CGContextClipToRect(currentContext, clippedRect); 

    CGFloat scaleFactor = width/sideFull; 

    if (isWidthGreaterThanHeight) { 
     CGContextTranslateCTM(currentContext, -((image.size.width - sideFull)/2)*scaleFactor, 0); 
    } 
    else { 
     CGContextTranslateCTM(currentContext,0, -((image.size.height - sideFull)/2)*scaleFactor); 
    } 
    CGContextScaleCTM(currentContext, scaleFactor, scaleFactor); 

    [imageView.layer renderInContext:currentContext]; 
    thumbnail = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
    [imageView release]; 
    return thumbnail; 
} 
+0

이 스 니펫에 대해 감사드립니다. 이 UIGraphicsContext 물건을 체크 아웃해야합니다 일부 이미지 조작 물건을 할. –

+0

흠 ... CALayer에 필요한 모든 가져 오기가 있습니까? LLVM은'imageView.layer '에 대해 CALayer의 전방 선언이라고 불평하고 있습니다. –

+0

예 QuartzCore 프레임 워크 –

0

[self.activeBtn setBackgroundImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"] forState:UIControlStateNormal]; 
+0

아니를 버튼의 높이와 너비를 통과 자른 버전을 만들려면이 기능을 사용할 수 있습니다처럼 당신은 설정, I 버튼의 배경 이미지를 설정할 수 있습니다 처음에는 괜찮 았어. 위의 호출로 설정하면 이미지/단추가 있어야하는 빈 공간이 나타납니다. 나는 그런데 시뮬레이터에 있습니다! –

관련 문제