UIButton图像的最大缩放比例?

时间:2013-07-01 23:06:22

标签: ios uibutton uiimage

我正在使用捏合手势识别器来处理缩放具有图像的按钮。我使用

建立了图像
[self.button setImage:image forState:UIControlStateNormal];
[self.button setImage:image forState:UIControlStateHighlighted];

在我的捏手势识别器处理程序中,我通过更改其frame.size来缩放按钮:

self.button.frame = [self makeButtonFrame];

其中makeButtonFrame使用当前比例(由捏合手势识别器处理程序调整):

- (CGRect) makeButtonFrame {
    CGRect frame = CGRectMake (STROKE_WIDTH + DISTANCE_FROM_STROKE, 
                               STROKE_WIDTH + DISTANCE_FROM_STROKE, 
                               self.scale * self.defaultWidth, 
                               self.scale * self.defaultHeight);
    return frame;
}

我发现用这种技术无法将按钮图像缩放到某一点以外。而且这个比例似乎取决于具体的形象(双倍!)。这个比例似乎在3-4左右。

目前我在我的捏手势识别器中保守地将比例限制为3倍。

但是,我想要一种更具分析性的方法来确定最大规模。而不只是基于我尝试过的一组图像进行估算。

1 个答案:

答案 0 :(得分:1)

不能肯定地说,但我怀疑这个'限制'实际上是你图像的大小。当您设置按钮image(而不是backgroundImage)时,如果图像大于帧,则缩小图像。如果图像较小,那么它只是在帧中居中(帧仍然控制着哪个区域响应触摸)。我认为你所看到的是当你把它放在按钮上时缩小你的图像,然后它会向上扩展直到它达到它的原始大小,此时它不会进一步缩放。有两种解决方案:

1:使用backgroundImage代替图片属性:

[self.button setBackgroundImage:image forState:UIControlStateNormal];

背景图像总是会扩展以填充框架,无论它有多大或者图像扭曲了多少。

2:使用transform属性进行缩放。这样做是这样的:

self.button.transform = CGAffineTransformMakeScale(scaleAmountX, scaleAmountY);

这样做的好处是您根本不需要调整帧 - 甚至不需要调整位置偏移,因为使用变换矩阵进行缩放是从中心而不是从角落进行缩放。它也应该响应其规模扩大的范围。