【问题标题】:Changing UISlider x and y position更改 UISlider x 和 y 位置
【发布时间】:2016-07-26 18:59:37
【问题描述】:

我有内部带有滑块的 viewController,我需要以编程方式更改滑块的位置。我正在使用以下代码:

mySliderOutlet.frame = CGRectMake(100, 250, mySliderOutlet.frame.size.width, mySliderOutlet.frame.size.height)

问题是这没有任何作用。插座连接正确,我在代码的其他地方使用它从滑块读取值。我会很高兴有任何建议。谢谢。

【问题讨论】:

  • 该代码只是滑块的框架。您是否要更改框架或框架内滑块的位置?
  • 我不知道该回答什么。我需要更改 viewController 中滑块的位置。我认为这可以通过改变框架来完成。我错了吗?
  • 您正在尝试将滑块的配置从水平更改为垂直?
  • 是的,我是。有问题吗?
  • @otter 你在 Objective-C 或 Swift 上需要这个吗?

标签: ios swift uislider cgrectmake


【解决方案1】:

请确保在设置滑块上的框架之前完成此操作

  1. 自动布局已关闭,并且故事板中的大小调整类已禁用。Here is how to do it
  2. 从storybaord关闭视图控制器内视图的“自动调整子视图”。Uncheck the autoresize subview option
  3. 确保您所做的此帧更新必须在主线程或主队列中完成。

【讨论】:

  • 是的,这可以解决问题。但我希望有一种方法可以移动滑块并且仍然能够使用约束。有没有办法做到这一点?总之非常感谢。我要使用这个解决方案。
  • 如果你想在storyboard中保留约束并且仍然想从代码中更新框架或绑定,你需要从约束中取出约束并从代码中更新它们的状态。
【解决方案2】:

使用AffineTransform,您可以旋转您的UISlider layer 尝试此代码以获得此结果

斯威夫特

class ViewController: UIViewController {

    @IBOutlet weak var verticalSlider: UISlider!
    func DEGTORAD(deg:Double) -> CGFloat
    {
      return CGFloat(deg * M_PI / 180.0)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        verticalSlider.layer.setAffineTransform(CGAffineTransformMakeRotation(DEGTORAD(90)))
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

希望对你有帮助

【讨论】:

  • 谢谢,但这不是我需要的。我知道如何旋转滑块,我的问题是我需要移动它。 @RatulSharker 给了我一个答案。
  • @otter,您可以更改约束常量值以将 UISlider 移动到您想要的任何位置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多