【问题标题】:Any examples of creating a dial?创建表盘的任何示例?
【发布时间】:2010-12-08 05:20:27
【问题描述】:

我想创建一个与某些复古电话应用具有类似行为的拨号盘。它们有一个圆形拨号器,可让您用手指旋转它。任何想法是如何创建的或讨论它的各个方面的一些链接?

【问题讨论】:

    标签: iphone cocoa-touch iphone-sdk-3.0 core-animation core-graphics


    【解决方案1】:

    创建带有数字的圆形拨号盘。将移动表盘部分创建为以数字表盘为中心的透明图像,以便您可以通过透明孔看到数字。在两者上应用一个小图像作为手指停止。当您触摸其中一个孔区域时,会跟踪手指的运动。当手指移动时,使用变换矩阵旋转透明表盘图像以跟随它。如果手指以错误的方式移动,或者当手指被抬起或移出旋转刻度盘时,刻度盘将“释放”,您可以使用合适的速度撤消旋转,以模拟弹簧加载的返回。

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:d];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationBeginsFromCurrentState:YES];
    CGAffineTransform transform = CGAffineTransformMakeRotation(/* some angle */);
    image.transform = transform;
    [UIView commitAnimations];
    

    检测实际拨打的号码可以通过多种方式完成,从在表盘上创建隐形按钮并从中获取事件,或者通过计算将旋转表盘返回原位所需的旋转角度。 我不认为实现它会很困难,困难的是艺术品。

    【讨论】:

    • 非常感谢!你如何让它跟上用户的速度,而不是通过 setAnimationDuration: 设定的速度?
    • 您可以相当容易地获得触摸坐标。如果您考虑使用机械电话拨号盘,只要您用力推动,您几乎可以以任何您喜欢的速度旋转它。因此,当触摸发生变化时,定期(计时器?每第 n 次触摸通知?)计算出先前采样点、新点和中心枢轴点之间的角度,并进行相当快的旋转(如上)以跟随手指。我希望能够以几乎任何速度沿顺时针方向移动它,但它始终以机械弹簧速度沿逆时针方向返回。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多