文档章节

【IOS】iOS 如何放大按钮点击热区

包灬子
 包灬子
发布于 2014/12/30 15:22
字数 359
阅读 4417
收藏 4

Apple的iOS人机交互设计指南中指出,按钮点击热区应不小于44x44pt,否则这个按钮就会让用户觉得“很难用”,因为明明点击上去了,却没有任何响应。

但我们有时做自定义Button的时候,设计图上的给出按钮尺寸明显要小于这个数。例如我之前做过的自定义Slider上的Thumb只有12x12pt,做出来后我发现自己根本点不到按钮……

这个问题在WWDC 2012 Session 216视频中提到了一种解决方式。它重写了按钮中的pointInside方法,使得按钮热区不够44×44大小的先自动缩放到44×44,再判断触摸点是否在新的热区内。

//官方在视频中给出的示例源码
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)withEvent
{
	CGFloat widthDelta = 44.0 - bounds.size.width;
	CGFloat heightDelta = 44.0 - bounds.size.height;
	bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta);
	return CGRectContainsPoint(bounds, point);
}

不过这里有两个小问题:

  • 当定义的Button.frame大于44×44时,这里仍然会将热区缩小至44×44,从而导致超过44×44的按钮热区失去响应。

  • bounds变量未定义

修正后的代码如下:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
    CGRect bounds = self.bounds;
    //若原热区小于44x44,则放大热区,否则保持原大小不变
	CGFloat widthDelta = MAX(44.0 - bounds.size.width, 0);
	CGFloat heightDelta = MAX(44.0 - bounds.size.height, 0);
	bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta);
	return CGRectContainsPoint(bounds, point);
}


© 著作权归作者所有

包灬子
粉丝 11
博文 37
码字总数 10847
作品 0
无锡
架构师
私信 提问
加载中

评论(1)

cabbageTZ
cabbageTZ
真的很实用,赞你
Flutter新锐专家之路:工程研发体系篇

作者:闲鱼技术-正物 写在前面 当前,闲鱼客户端已经实现了基于Flutter的商品详情页的全量重构,线上效果良好。从alpha一路走来,我们遇到了很多问题,或基于原理,或透过社区,或与官方合作...

闲鱼技术
2018/08/06
0
0
添加Flutter到现有iOS的项目

原文链接 https://tryenough.com/flutter03 添加Flutter到现有iOS的项目 $ flutter create -t module my_flutter 初始化pod的环境: 此时工程中会出现一个Podfile文件,添加项目依赖的第三方...

TryEnough
01/04
0
0
Genesis-3D新手入门——14.发布到iOS平台

发布到iOS平台 在游戏制作完毕后,需要进行平台打包才能最终发布。Genesis-3D是一个可以支持很多平台的编辑器,这一篇我们就来学习如何让你把制作出的游戏在iOS平台上运行。 准备步骤 1.注册...

lengche
2014/02/20
37
0
UDID是什么 如何获取iOS设备UDID-之udid获取篇

UDID是什么? UDID 是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码看起来是随机的,实际上是跟硬件设备特点相联系...

qiyu123
2016/01/29
2.1K
0
【IOS】自动旋转与调整大小xcode5之前&xcode5之后

//4.5版本开始启用Autolayout了,可以在file inspector 里面 interface Builder Document栏下取消“Use Autolayout”的钩选。 苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写的程序也...

呢喃的猫咪
2013/08/28
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
37分钟前
6
0
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
6
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
10
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部