可以实现的效果:
1.取消UIButton的高亮状态
2.缩小UIButton的响应区域
3.对UIButton中的UILabel 的位置尺寸的设置
4.对UIButton中的UIImageView 的位置尺寸的设置
#import "YYButton.h"
@implementation YYButton
/**
不想让UIButton有高亮状态
@param highlighted 取消按钮高亮状态下做的事
*/
- (void)setHighlighted:(BOOL)highlighted{
}
/**
缩小UIButton的响应区域
@param point 用户点击的点
@param event 响应的事件
@return 用户点击的区域是否有时间响应
*/
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
CGRect rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height * 0.5);
if (CGRectContainsPoint(rect, point)) { // 这个点是否在这个区域内 返回一个BOOL
// 在指定的范围内
return [super hitTest:point withEvent:event];
}
return nil;
}
/**
对UIButton中的UILabel 的位置尺寸的设置
@param contentRect 当前按钮的位置尺寸
@return 返回当前按钮当中label的位置尺寸
*/
- (CGRect)titleRectForContentRect:(CGRect)contentRect{
CGFloat w = 40;
CGFloat h = 48;
CGFloat x = (contentRect.size.width - w) / 2;
CGFloat y = 20;
return CGRectMake(x , y, w, h);
}
/**
对UIButton中的UIImageView 的位置尺寸的设置
@param contentRect 当前按钮的位置尺寸
@return 返回当前按钮当中图片的位置尺寸
*/
- (CGRect)imageRectForContentRect:(CGRect)contentRect{
CGFloat w = 40;
CGFloat h = 48;
CGFloat x = (contentRect.size.width - w) / 2;
CGFloat y = 20;
return CGRectMake(x , y, w, h);
}
/* 在这里也可以修改button内部imageView 和 titleLabel 的frame
- (void)layoutSubviews{
[super layoutSubviews];
self.imageView.frame = ...
self.titleLabel.frame = ...
}
*/
@end
#define angle2Rad(angle) ((angle) / 180.0 * M_PI) // 数值转化为弧度
效果图:


网友评论