以编程方式将视网膜照片分配给UIButton

时间:2013-11-13 08:14:43

标签: ios objective-c uibutton autolayout

在应用程序中,用户拍摄照片,然后将照片分配给按钮,他们可以点按这些按钮重新拍摄照片。我无法让它为视网膜图像工作。

以下是代码:

BodyData *lastPerson = (BodyData*)[ReadPerson readLastEntry];
CGRect frame = self.frontImage.frame;
CGSize doubleSize = CGSizeMake(self.frontImage.frame.size.width * 2, self.frontImage.frame.size.height * 2);

NSLog(@"frame is: %@", NSStringFromCGRect(self.frontImage.frame));

UIImage *frontPhoto = [[UIImage imageWithData:[lastPerson readPhotoOfSize:Full withAngle:Front withPlaceholderIfNoImage:NO]] resizeTo: doubleSize]; // Custom category to resize image

if (frontPhoto) {
    [[self.frontImage imageView] setContentMode: UIViewContentModeScaleAspectFit];
    [self.frontImage setImage:frontPhoto forState:UIControlStateNormal];
    [self.frontImage setImage:[frontPhoto darkenedImage] forState:UIControlStateHighlighted];
    [self.frontImage setFrame:frame];
    [self.frontImage.imageView setFrame:frame];
    NSLog(@"frontimage sized to: %@", NSStringFromCGSize(self.frontImage.frame.size));
}

日志输出为:

frame is: {{20, 145}, {129, 172}}
frontimage sized to: {258, 344}

已启用Autolayout,但图片不会在viewdidload中更改,而是在已拍摄照片的通知中更改。

如何将视网膜质量图像作为按钮的值?我添加了所有框架调整大小的东西,因为按钮正在调整大小,我试图覆盖它,但即使这样也行不通。

所以按钮应为:{129,172},照片的@ 2x版本。但相反,它是{258,344},带有@ 1x版本的照片。

2 个答案:

答案 0 :(得分:1)

我的建议是调整图像的比例:

UIImage *otherImage;
UIImage *image              = [[UIImage alloc] initWithCGImage:otherImage.CGImage
                                                         scale:otherImage.scale * 2.0f
                                                   orientation:otherImage.imageOrientation];

答案 1 :(得分:0)

明确一件事。如果你有一个10x10像素大小的按钮,那么你必须使用10x10尺寸的图像进行非视网膜显示和放大用于视网膜显示的20x20尺寸图像。

你说照片是由用户拍摄的,然后设置为按钮。在达到视网膜质量的情况下,您必须对图像执行一些缩放以将其设置为视网膜图像。