iOS实现缩放的算法逻辑

在iOS上实现缩放的算法其实很简单

iOS实现缩放的算法逻辑_第1张图片
Paste_Image.png
func pinchGestureRecognized(sender: UIPinchGestureRecognizer) {
    let offset: CGFloat = sender.scale < 1 ? 5.0 : -5.0
    let oldFrame = l.frame
    let oldOrigin = oldFrame.origin
    let newOrigin = CGPoint(x: oldOrigin.x + offset, y: oldOrigin.y + offset)
    let newSize = CGSize(width: oldFrame.width + (offset * -2.0), height: oldFrame.height + (offset * -2.0))
    let newFrame = CGRect(origin: newOrigin, size: newSize)
    if newFrame.width >= 100.0 && newFrame.width <= 300.0 {
        l.borderWidth -= offset
        l.cornerRadius += (offset / 2.0) 
        l.frame = newFrame 
    }
}

下面分别解释函数中的每一行代码:

  1. 确定偏移值:scale大于1表示缩小,scale小于1表示放大,每调用一次该函数,放大或缩小5
  2. l表示someView的layer,先获取缩放前layer的frame
  3. 获取缩放前frame的起始点
  4. 根据缩放值计算新的起始点,很简单的数学计算,就是在缩放前的起始点上加上(放大)或减去(缩小)缩放值(缩放值为正数,即5)
  5. 计算缩放后的frame宽高,也很简单,放大的话就是原来的宽高加上2倍缩放值,缩小的话就是原来的宽高减去2倍缩放值
  6. 使用缩放后的初始值和宽高得到新的frame
  7. 限定新的frame度只能在100到300之间
  8. 设置边框的宽度,放大的话就是原来的宽度加上缩放值,缩小的话就是原来的宽高减去缩放值,确保边框内的内容不变
  9. 更新边角,缩小即边角增加缩放值的二分之一,放大即边角减小缩放值的二分之一
    10 将view的layer设置为新的frame
    缩放完成

你可能感兴趣的:(iOS实现缩放的算法逻辑)