xcode iOS增加UIButton命中区域

时间:2014-10-06 21:50:45

标签: ios uibutton xcode6

我试图增加我的UIButton的命中区域。我有一个新的Xcode项目,在故事板的中心有一个UIButton。该按钮通过插座和动作连接到我的视图控制器。我可以通过编程方式更改按钮标题,只是为了好玩,当我点击按钮时,它会改变视图的背景。所以我知道一切都是联系起来的。

从我在线阅读的内容来看,这应该有效,但事实并非如此。

[button setFrame:CGRectMake(button.frame.origin.x,button.frame.origin.y,-64,-64)];

有什么想法?我已经尝试过没有负面利润而且也没有用。顺便说一句,我已经尝试了很多地方这个问题,但它没有用。谢谢您的帮助。另外,我听说UIButton的子类化可能会产生一个问题,对此有何看法?

更新: 我想制作的UIButton有一个背景颜色,是一个特定的大小。我希望保持这个大小不变,但增加它周围的命中区域而不会扭曲按钮的外观。

3 个答案:

答案 0 :(得分:5)

我想您只想使用相同的按钮将背景颜色或背景图像限制在同一区域并增加触控区域?

据我所知,你不能在界面构建器中这样做。但是通过使用图层可以编码。

取出按钮的出口

  CALayer *buttonlayer=[CALayer layer];

  buttonlayer.frame=CGRectMake(50 , 50, 50, 50); // set the frame where you want to see the background color or background image to be visible in your button

  buttonlayer.backgroundColor=[[UIColor colorWithPatternImage:[UIImage imageNamed:@"yourimage.png"] ] CGColor]; // if u want image (but remember the image size must same as your layer frame it may  look bad if the image bounds does not mach your layer bounds, because you are setting color not image)


  // to set color (donot use if you want image, use colorWithPatternImage to set image color)
   buttonlayer.backgroundColor=[[UIColor graycolor] CGColor];  // if you want only color

    // you can add round rects to the button layer

    buttonlayer.cornerRadius=2.5f;

   [yourbutton.layer addSublayer:buttonlayer];

我不确定您在寻找什么我希望这可以帮助您,但只需检查一次图像enter image description here

答案 1 :(得分:2)

要在不扭曲背景颜色或图像的情况下增加命中区域,将它们分开可能是最简单的。在提供视觉效果的UIView(或UIImage等)上方有一个没有背景颜色的清晰UIButton。这样,您可以对UIButton的框架执行任何操作,除非您将相同的转换应用于其他UIView,否则它不会影响视觉效果。

至于为什么这行代码不起作用,CGRectMake中的第三和第四个元素不是边距,它们是尺寸:你不能有负高度和宽度。放入你想要的最终尺寸,而不是更改或边距,(例如,如果你想将宽度缩小100倍,输入80)。

答案 2 :(得分:2)

UIButton子类并实现backgroundRectForBounds方法。

将帧扩展到所需的触摸区域大小,然后通过添加插入来缩小背景的边界。

- (CGRect)backgroundRectForBounds:(CGRect)bounds {
    return CGRectInset(bounds, -50, -50);
}

更多信息: https://developer.apple.com/library/ios/documentation/uikit/reference/uibutton_class/index.html#//apple_ref/occ/instm/UIButton/backgroundRectForBounds