0

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

[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 倍。

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

4

1 回答 1

1

不能肯定地说,但我怀疑这个“限制”实际上是你图像的大小。当您设置按钮image(而不是backgroundImage)时,如果图像大于框架,则图像将按比例缩小。如果图像更小,那么它只是在框架中居中(尽管框架仍然控制响应触摸的区域)。我认为您看到的是当您将图像放在按钮中时缩小图像,然后放大直到达到原始大小,此时它不再缩放。有两种解决方案:

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

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

背景图像总是扩展以填充框架,无论它有多大或图像扭曲程度如何。

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

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

这样做的好处是您根本不需要调整框架 - 甚至不需要调整位置偏移,因为使用变换矩阵进行缩放是从中心而不是从角落进行的。它还应该响应其放大区域内的触摸。

于 2013-07-02T02:28:12.843 回答