【发布时间】:2015-08-24 09:39:18
【问题描述】:
我想问一下iOS 8键盘扩展在按住键盘键时如何实现弹出动画。我知道如何在每个键上分配长按手势,但不知道如何为键设置动画以显示该特定键中的其他字符。
编辑:我看到有人问here 这个类似的问题,但不同之处在于他能够创建流行动画。
编辑 2:我看到另一个类似的问题被问到 here,但与标准键盘上的默认外观相比,它们的外观有所不同。
编辑 3:我能够在敲击键盘键时实现我想要的行为。我只需要知道如何正确绘制扩展键视图。附上图片供参考。第一个是我们迄今为止所取得的成就。我想知道如何绘制那个字母 F 键,然后将其转换为 UIView。
编辑 4: 我能够创建按键弹出视图,但不是我想要的类似于标准键盘按键弹出的所需形状或层。供参考:
编辑 5: 我尝试了 PaintCode 的演示版,它生成了以下代码。这是在我的自定义视图上的 drawRect 方法中。我的按键宽度通常为 26.0,高度为 39.0。顺便说一句,我也在使用 Objective-C。
UIBezierPath* bezierPath = UIBezierPath.bezierPath;
[bezierPath moveToPoint: CGPointMake(26, 5.12)];
[bezierPath addLineToPoint: CGPointMake(26, 18.03)];
[bezierPath addCurveToPoint: CGPointMake(23.05, 22.41) controlPoint1: CGPointMake(26, 19.88) controlPoint2: CGPointMake(24.82, 21.51)];
[bezierPath addCurveToPoint: CGPointMake(19.62, 25.27) controlPoint1: CGPointMake(22.05, 23.24) controlPoint2: CGPointMake(20.79, 24.3)];
[bezierPath addCurveToPoint: CGPointMake(19.62, 39.95) controlPoint1: CGPointMake(19.62, 30.82) controlPoint2: CGPointMake(19.62, 39.95)];
[bezierPath addCurveToPoint: CGPointMake(17.17, 42) controlPoint1: CGPointMake(19.62, 41.08) controlPoint2: CGPointMake(18.52, 42)];
[bezierPath addLineToPoint: CGPointMake(8.83, 42)];
[bezierPath addCurveToPoint: CGPointMake(6.38, 39.95) controlPoint1: CGPointMake(7.48, 42) controlPoint2: CGPointMake(6.38, 41.08)];
[bezierPath addCurveToPoint: CGPointMake(6.38, 25.33) controlPoint1: CGPointMake(6.38, 39.95) controlPoint2: CGPointMake(6.38, 30.89)];
[bezierPath addCurveToPoint: CGPointMake(5.67, 24.74) controlPoint1: CGPointMake(6.15, 25.14) controlPoint2: CGPointMake(5.91, 24.94)];
[bezierPath addCurveToPoint: CGPointMake(5.37, 24.49) controlPoint1: CGPointMake(5.57, 24.66) controlPoint2: CGPointMake(5.47, 24.57)];
[bezierPath addLineToPoint: CGPointMake(5.32, 24.45)];
[bezierPath addCurveToPoint: CGPointMake(2.75, 22.3) controlPoint1: CGPointMake(4.41, 23.69) controlPoint2: CGPointMake(3.5, 22.93)];
[bezierPath addCurveToPoint: CGPointMake(1.02, 20.85) controlPoint1: CGPointMake(2.06, 21.92) controlPoint2: CGPointMake(1.47, 21.43)];
[bezierPath addCurveToPoint: CGPointMake(0.98, 20.82) controlPoint1: CGPointMake(0.99, 20.83) controlPoint2: CGPointMake(0.98, 20.82)];
[bezierPath addCurveToPoint: CGPointMake(0, 18.03) controlPoint1: CGPointMake(0.36, 20.02) controlPoint2: CGPointMake(-0, 19.06)];
[bezierPath addLineToPoint: CGPointMake(0, 5.12)];
[bezierPath addCurveToPoint: CGPointMake(2.48, 1.01) controlPoint1: CGPointMake(0, 3.44) controlPoint2: CGPointMake(0.97, 1.94)];
[bezierPath addCurveToPoint: CGPointMake(6.05, 0) controlPoint1: CGPointMake(3.48, 0.39) controlPoint2: CGPointMake(4.71, 0.02)];
[bezierPath addLineToPoint: CGPointMake(6.13, 0)];
[bezierPath addLineToPoint: CGPointMake(19.87, 0)];
[bezierPath addCurveToPoint: CGPointMake(26, 5.12) controlPoint1: CGPointMake(23.25, 0) controlPoint2: CGPointMake(26, 2.29)];
[bezierPath closePath];
[[UIColor redColor] setFill];
[bezierPath fill];
问题是,它看起来像这样:
如果我能把它做得足够大,让它像默认键盘一样,那么它就可以工作了。
【问题讨论】:
-
您可以使用
CGAffineTransforms 来缩放贝塞尔路径的CGPath属性的副本,直到它足够大。 -
查看此链接。我添加了弹出按钮的代码:stackoverflow.com/a/33355236/535013
-
感谢穆扎米尔爵士 :)
-
Cau 你分享你的想法?我开发了自定义键盘,而不是应用程序扩展。我必须显示几个弹出键。我的键盘包含数学键。例如,当用户单击平方根按钮时,必须在弹出窗口中显示平方根、立方根、nth root
标签: ios ios8 ios-keyboard-extension