SwiftUI 手势操作

基本概念

在ios中我们经常用到的手势操作有点击长按拖拽缩放旋转。在手势操作时,不同的手势有不同的触发函数,比如,点击在点击完成时触发某个函数,拖拽手势不仅仅在拖拽完成时触发函数,而在拖拽的过程中也可以触发两个函数,在这两个函数中捕捉到不同的参数。对于手势的捕获也有两种方式,我们具体的看下这两种方式

方式一,通过gesture捕获手势

我们可以给View添加一个gesture()的装饰函数来捕捉手势,在这个函数中设定不同Gesture()就可以捕捉到不同的手势。在捕捉到手势之后,还有3个回调函数处理不同的情况,updating(_:body)在手势操作时被调用,这个函数需要绑定一个@GestureState修饰的变量,这个变量在回调时被修改,但只是临时的修改,手势操作完这个变量会被修改为手势操作之前的初始化值.onChange(_:)这个同样是在手势操作时被调用,这个函数中修改的变量在手势操作结束时被保留。onEnd()这个函数时在手势操作成功之后调用。

缩放

我们设定一个图片缩放场景来演示缩放手势,先通过image显示一张图片,我们通过缩放手势让图片放大或者缩小。捕获的gesture是MagnificationGesture.代码如下

@GestureState var zoom:CGFloat=1

Image("j1").resizable().frame(width: 200, height: 200, alignment: .leading).scaleEffect(zoom).gesture(MagnificationGesture().updating($zoom, body: {
   
                gestureZoom,z,transaction in
                z=gestureZoom
            }))

设定一个@GestureState修饰的变量zoom,用来控制图片的缩放比例。在这段代码中gestureZoom是我们做缩放手势时的缩放比例,z就是zoom,我们将gestureZoom的数值赋值过去,图片就放大/缩小,当我们手势结束时,zoom就变成1。图片回到原先大小。

@State var zoom:CGFloat=1
Image("j1").resizable().frame(width: 200, height: 200, alignment: .leading).scaleEffect(zoom).gesture(MagnificationGesture().onChanged({
   
                z in zoom=z
            }))

这段代码,我们将zoom@State修饰,onChangez是缩放比例,我们将z赋值给zoom。图片同样放大/缩小.但是手势结束时,图片不会还原。

@State var zoom:CGFloat=1
Image("j1").resizable().frame(width: 200, height: 200, alignment: .leading).scaleEffect(zoom).gesture(MagnificationGesture().onEnded({
   z in zoom=z}))

这段代码,我们在onEnd中设置zoom的数值,图片只有在手势完成之后才显示出来缩放。
以上的三段代码展示了三个回调函数的作用。那么我们要完成一个图片的缩放功能是如何实现的呢。代码如下

@State var zoom
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值