我正在使用捏合手势识别器来处理缩放具有图像的按钮。我使用
建立了图像[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倍。
但是,我想要一种更具分析性的方法来确定最大规模。而不只是基于我尝试过的一组图像进行估算。
答案 0 :(得分:1)
不能肯定地说,但我怀疑这个'限制'实际上是你图像的大小。当您设置按钮image
(而不是backgroundImage
)时,如果图像大于帧,则缩小图像。如果图像较小,那么它只是在帧中居中(帧仍然控制着哪个区域响应触摸)。我认为你所看到的是当你把它放在按钮上时缩小你的图像,然后它会向上扩展直到它达到它的原始大小,此时它不会进一步缩放。有两种解决方案:
1:使用backgroundImage
代替图片属性:
[self.button setBackgroundImage:image forState:UIControlStateNormal];
背景图像总是会扩展以填充框架,无论它有多大或者图像扭曲了多少。
2:使用transform
属性进行缩放。这样做是这样的:
self.button.transform = CGAffineTransformMakeScale(scaleAmountX, scaleAmountY);
这样做的好处是您根本不需要调整帧 - 甚至不需要调整位置偏移,因为使用变换矩阵进行缩放是从中心而不是从角落进行缩放。它也应该响应其规模扩大的范围。