iOS实现缩放的算法逻辑

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

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中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,551评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,141评论 5 13
  • Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Laye...
    小猫仔阅读 3,776评论 1 4
  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 6,289评论 0 13
  • 【参考文档】 1.poj1390解题报告
    安东可阅读 463评论 0 0