【问题标题】:Combine two CGRect合并两个 CGRect
【发布时间】:2016-11-04 15:30:14
【问题描述】:

有什么方法可以将两个 CGRect 结合起来吗? 我想将“y: 65.0”添加到现有的 CGRect 中,但似乎找不到任何方法来做到这一点。 对我来说听起来像是一项简单的任务,但在 Xcode 中似乎不可能完成,因为 CGRect 之间不允许使用“+=”。

编辑:尝试使用 offsetBy 并使用以下代码添加它们。添加 CGRect 时,我收到错误消息:No '+' candidates produce the expected contextual result type 'CGRect'

    var fromRect:CGRect = self.tableView.rectForRow(at: indexPath)
    let addRect = CGRect(x: 0.0, y: 65.0, width: 0.0, height: 0.0)

    //fromRect.offsetBy(dx: 0, dy: 65.0)
    fromRect = fromRect + addRect

【问题讨论】:

标签: swift swift3 cgrect


【解决方案1】:

或者你可以自己实现一个操作符:

func +(left: CGRect, right: CGRect) -> CGRect {
    let origin = CGPoint(x: left.origin.x + right.origin.x, y: left.origin.y + right.origin.y)
    let size = CGSize(width: left.size.width + right.size.width, height: left.size.height + right.size.height)
    return CGRect(origin: origin, size: size)
}

func +=(left: inout CGRect, right: CGRect) {
    left = left + right
}

但是对于这个问题有一个更简单的解决方案,而不使用运算符: 只需这样做:(我不确定这部分,因为您似乎想做更复杂的事情?)

rect.origin.y += 65 

【讨论】:

  • 这个操作在二维平面中意味着什么?有CGRectIntegral 我理解,但这不是真的。
  • 这首先是他的答案,他现在可以做 rect += CGRect(x: 0, y: 65.0, width: 0, height: 0)
  • 是的,这就是我没有否决答案的原因。我认为这个问题很糟糕。
  • 但是你让我觉得有一个更简单的解决方案,老实说,我只是受到问题中“+=”的影响,哈哈
  • 使用了 '+' 函数,它成功了!谢谢@Stormsyders
【解决方案2】:

如果您想在矩形的位置上添加偏移量,如添加 y:65 的示例,您可以使用 rect.offsetBy(dx: 0, dy: 64)

【讨论】:

  • 由于某种原因对我不起作用。我试过的代码: var fromRect:CGRect = self.tableView.rectForRow(at: indexPath) let addRect = CGRect(x: 0.0, y: 65.0, width: 0.0, height: 0.0) //fromRect.offsetBy(dx: 0 , dy: 65.0) romRect = fromRect + addRect 当我尝试使用最后一行代码时,我收到错误“没有'+'候选产生扩展上下文结果类型'CGRect'
  • 我不确定你在最后一行中做了什么。如果你试图将一个矩形偏移 65 y,那么让 newRect = fromRect.offsetBy(dx: 0, dy: 65.0)。您不能在矩形上使用“+”运算符。 offsetBy 函数可用于添加矩形的 X 或 Y 位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
相关资源
最近更新 更多