【问题标题】:How to get the centre of the view如何获得视图的中心
【发布时间】:2016-02-18 03:14:50
【问题描述】:

我正在尝试通过使用下面的代码来获得视图的中心,正在使用的类来自DTIActivityIndicatorView,它向视图添加了一个自定义活动指示器。

var midX = CGRectGetMidX(self.view.bounds)
var midY = CGRectGetMidY(self.view.bounds)

let topStoriesActivityIndicator: DTIActivityIndicatorView = DTIActivityIndicatorView(frame: CGRect(x: midX, y: midY, width:80.0, height:80.0))

但上面的代码给了我以下结果,其中活动指示器不在中间居中。

【问题讨论】:

    标签: swift uiview uiviewcontroller


    【解决方案1】:

    Swift 4 扩展:

    extension CGRect {
        var center: CGPoint { .init(x: midX, y: midY) }
    }
    
    let someRect = CGRect(x: 10, y: 10, width: 200, height: 40)
    
    let theCenter = someRect.center // {x 110 y 30}
    

    【讨论】:

    • someRect 是什么意思?你能举一些例子吗?谢谢
    • 添加了一些矩形。兄弟
    【解决方案2】:

    斯威夫特 5

    let frameSize: CGPoint = CGPoint(x:self.view.bounds.midX, y:self.view.bounds.midY)
    
    let frameSize: CGPoint = CGPoint(x:yourView.bounds.midX, y:yourView.bounds.midY)
    

    或者

     let frameSize: CGPoint = self.view.center
    

    【讨论】:

      【解决方案3】:

      这个怎么样?

      let width = 80
      let height = 80
      

      topStoriesActivityIndicator: DTIActivityIndicatorView = DTIActivityIndicatorView(frame: CGRect(x: view.bounds.midX - ( width * 0.5), y: view.bounds.midY - ( height * 0.5) , width: width, height: height))
      

      这可能有助于解决问题

      【讨论】:

        【解决方案4】:

        斯威夫特 3:

        let someRect: CGRect(x: 0, y: 0, width: 10, height: 10)
        let midX = someRect.midX
        let midY = someRect.midY
        

        【讨论】:

          【解决方案5】:

          斯威夫特 3

          以下代码代表屏幕的中心:

          let frameSize: CGPoint = CGPoint(x: UIScreen.main.bounds.size.width*0.5,y: UIScreen.main.bounds.size.height*0.5)
          

          希望对您有所帮助!

          【讨论】:

          • UIScreen.main.bounds.midX 和 UIScreen.main.bounds.midY 也适用于 swift 4
          • 请注意,UIScreen.main 不是view 中心,而是整个屏幕center
          【解决方案6】:

          边界可以不同于视图的大小。尝试使用框架,如果不起作用,请尝试使用边界。

          var midX = CGRectGetMidX(self.view.bounds)
          var midY = CGRectGetMidY(self.view.bounds)
          

          此外,由于您将视图定位在中心,然后添加宽度和高度,它也会显示为关闭。你应该像这样设置框架

          let topStoriesActivityIndicator: DTIActivityIndicatorView = DTIActivityIndicatorView(frame: CGRect(x: midX - 80.0, y: midY - 80.0, width:80.0, height:80.0))
          

          【讨论】:

          • 这样做会产生完全相同的结果
          • bounds 是此处使用的正确属性;如果帧的原点不为零,则获取帧的 MidX/Y 将产生错误的结果。
          【解决方案7】:

          试试这个:-

          var midY = self.view.frame.height / 2
          var midX = self.view.frame.width / 2
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-01-12
            • 1970-01-01
            • 1970-01-01
            • 2015-09-06
            • 2015-03-28
            • 2016-11-01
            • 1970-01-01
            • 2020-09-24
            相关资源
            最近更新 更多