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

Posted

技术标签:

【中文标题】以编程方式将视网膜照片分配给 UIButton【英文标题】:Programatically assign a retina photo to a UIButton 【发布时间】:2013-11-13 08:14:43 【问题描述】:

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

代码如下:

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

自动布局已启用,但图像不会在 viewdidload 时更改,而是在照片已拍摄的通知中更改。

如何获得视网膜质量的图像作为按钮的值?我已经添加了所有框架调整大小的东西,因为按钮正在调整大小并且我正在尝试覆盖它,但即使这样也不起作用。

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

【问题讨论】:

不清楚什么不起作用。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

您说照片是用户拍摄的,然后设置为按钮。如果要达到视网膜质量,您必须对图像进行一些缩放才能将其设置为视网膜图像。

【讨论】:

以上是关于以编程方式将视网膜照片分配给 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建 UIToolbar

以编程方式将位置分配给android中的按钮

使用 Keycloak API 以编程方式将角色分配给组

如何以编程方式将组件分配给 Delphi GridPanel 行和列?

以编程方式将边距和/或填充分配给标签

如何以编程方式将按钮添加到 gridview 并将其分配给特定的代码隐藏函数?