【问题标题】:Get a custom UIView subclass to follow a UIControl around获取自定义 UIView 子类以跟随 UIControl
【发布时间】:2011-12-01 14:47:36
【问题描述】:

我有一个 UIControl 的子类,它代表一个滑块开关,带有一个变量“百分比”,它存储滑块的当前位置,即 0.0 表示滑块在左侧,1.0 表示滑块在右侧.我有两张看起来像气泡的图像,当用户单击滑块时,我想显示其中一张图像(它们的大小相同但看起来不同,设计为如果百分比 0.5)并让对话气泡的“尾部”跟随滑块(即框架设置为百分比的函数)。

我为图像创建了一个自定义 UIView,它通过布尔参数更改要显示的图像。我尝试在 UIControl 子类中创建一个参数,该参数将 UIView 与所有其他绘图一起绘制,但我需要将它绘制在 UIControl 的矩形之外,这不能从 UIControl 的 drawRect: 方法内部完成。当 UIControl 的百分比值发生变化时,管理这两个视图并确保对话气泡始终更新的好方法是什么?

【问题讨论】:

    标签: iphone objective-c ios uiview uicontrol


    【解决方案1】:

    听起来你的 UIControl 应该是:

    • 足够高,可以容纳条形图和气泡图
    • 透明(以便您可以看到气泡“滑动”的视图部分的后面)

    还是我错过了什么?

    【讨论】:

    • 没关系,但是我在 UIControl 上拦截了触摸事件,并且在我希望对话气泡出现的位置后面有一个文本字段,所以我不希望该区域在有点击时拦截点击空空如也。另外,UIControl 的构建方式取决于其框架的大小以及其组件图像的大小,因此更改框架大小会有点混乱。
    【解决方案2】:

    首先,确保在您的 UISlider 中将 continuous property 设置为 TRUE。

    然后,确保您有一个 IBAction 来接收来自您的 UISlider 的更新事件。您可以在 Interface Builder(内置于 XCode 4)中轻松建立连接,也可以使用 UIControl 的 addTarget:action:forControlEvents: 方法以编程方式进行。

    最后,在 IBAction 中,您现在可以更改“语音气泡”UIView 的框架(确保将其链接到您的父视图控制器,作为 @interface .h 文件中的成员)。它相对于滑块的显示位置留给您作为家庭作业(因为它确实是特定于实现的 - 或者,换句话说,它的显示方式取决于每个单独的应用程序和程序员)。

    希望这些信息对您有所帮助!

    【讨论】:

    • 不幸的是,我的滑块不是 UISlider 子类,它是 UIControl 子类,并且只有两种状态:如果用户将滑块放在中间,它将转到最近的一侧。有什么办法可以拦截一个说百分比值改变的事件?
    • 所以你的伪滑块只有两种状态(“on”和“off”)?听起来百分比值只能是 0% 和 100%。无论如何...您仍然可以按照我在上面的答案中写的内容...向您的UIControl 添加一个目标和一个动作,当有UIControlEventValueChanged 事件时触发。这将处理您尝试执行的操作。
    【解决方案3】:

    感谢您的回答 - 事实证明,最好的方法是为我的自定义 UIControl 声明一个委托协议,并将语音气泡视图分配为委托。然后我创建了一个方法,告诉对话气泡更新位置(传递位置),并在控件位置更新时从 UIControl 调用它。

    【讨论】:

      【解决方案4】:

      可能更简单的方法是向 UIControl 添加一个指向 UIView 的属性,并在更改控件状态的方法中移动它。当然,要做到这一点,您需要创建一个像 MyCustomControl 这样扩展 UIControl 的类。

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 2017-10-02
        • 2011-02-23
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        相关资源
        最近更新 更多