【发布时间】:2011-09-20 08:11:06
【问题描述】:
我已经基于Ray Wenderlich's Tutorial 制作了一个自定义的零图像、Core Graphics 绘制的 UIButton(唯一的修改是 CoolButton 的 drawRect: 方法,更改了绘图代码),它在大多数情况下都很好用。但是,有时当我点击它很短的时间时,它会一直处于沮丧状态,并且不会恢复正常。
从这里开始,让它恢复正常状态的唯一方法是长按。简单的点击意味着它一直处于压抑状态。
要注意的另一件事是,我已将 Touch Up Inside 与一系列长方法挂钩 - 我认为完成所需的时间不会超过 0.1 秒。我什至在连接到 Touch Up Inside 的 @selector 中使用了 dispatch_async,所以我认为 UI 更新不应该有延迟。
我在drawRect: 中添加了一个NSLog,通常每次按下按钮都会触发 3 次,每次按下按钮都会改变UIControlState 的位置:
- 对于某些短按,它会变为突出显示、突出显示、正常
- 对于长按,它是高亮显示、正常、正常
但是,对于非常短的按下,它只会触发两次,突出显示 -> 突出显示。
当长按恢复正常时,它会变为 H、N、N。
这让我困惑了一段时间,我无法弄清楚为什么短按只会触发两次drawRect:,或者为什么touchesEnded: 似乎没有调用drawRect:。也许touchesEnded: 没有开火?
我真的希望有人可以提供帮助。
【问题讨论】:
-
不使用 GCD 时是否有效?
-
无法评论为什么它没有发生,但每次从头开始重新绘制以进行修饰/触地得分可能不是一个好主意。为什么不生成一个 UIImage,缓存它并使用它呢?从性能的角度来看要好得多,就像一开始就使用图像一样。
-
一个按下的按钮 :)) 这应该是一个模因:P
标签: iphone objective-c uibutton core-graphics