【问题标题】:Implementing a gauge control with UIKit on the iPhone在 iPhone 上使用 UIKit 实现仪表控件
【发布时间】:2010-02-08 09:49:58
【问题描述】:

对于我正在开发的应用程序,我想实现一种类似仪表的控件。仪表应该是垂直方向的,我想获得一个刻度盘的效果,上面印有数值以垂直移动,以便当前值出现在仪表的中心。而当前不可见的表盘部分会被剪掉。

我认为一个好的方法是让一个 UIView 充当顶部可见部分(如果你愿意的话,仪表的窗口)和一个仅使用值和标记绘制刻度盘的子视图。顶视图将收到一条消息,指示要显示的值并移动子视图,以便当前值居中,而当前不可见的表盘部分被剪裁。我试着做一个小例子(表盘上变灰的部分应该被剪掉):

我不确定如何设置视图,以便我可以真正让它工作。我尝试了两个 UIView 子类,但渲染表盘的视图只会在屏幕上的某个意外位置绘制,并且不会被父视图剪切。

我真的只是在寻找有关实现此类控件所需部件的一般建议。正如我试图描述的那样,使用两个视图是否有意义,或者我应该将其实现为一个 UIView 子类,它只是确定每当值更改时要绘制表盘的哪一部分?或者可能是完全不同的东西?

【问题讨论】:

    标签: iphone objective-c uikit custom-controls


    【解决方案1】:

    查看UIScrollView 类。

    根据我在您的问题中读到的内容,这应该可以满足您的需求。

    滚动视图充当内容视图之上的一种“窗口”。如果内容视图较大,则会被滚动视图剪裁。

    所以你可以有一个内容视图,也就是说,为了参数,50x320,滚动视图只有 50 x 50。内容视图的区域将被裁剪为 50x50 大小,你将能够通过用手指滚动来移动内容视图,就像其他原生 iPhone 控件一样。

    许多(如果不是全部)iPhone 应用程序以某种方式使用滚动视图。 UITableViews 是滚动视图的子类,UITextViews 也是如此。

    Apple 有一个不错的示例应用程序,它展示了如何使用滚动视图,所以也请检查一下。

    【讨论】:

    • UIScrollView 的内容是作为子视图添加的吗?
    • 是的,为滚动视图设置子视图,然后设置滚动视图的contentSize、contentInsets等
    • 您不需要使用滚动视图来执行此操作。任何视图都可以。只需将 mask flat 设置为 true 并将子视图的 frame 设置为负 x 坐标即可。
    • 是的,它是这样工作的……我在哪里渲染我在插图中显示的半透明渐变。我首先认为我会在父视图中执行此操作 - 但是,它会在子视图下合成。我只是在顶部添加另一个视图还是有其他方法?
    • 是的,只需将其作为另一个视图添加到顶部即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多