SwiftUI学习笔记Gesture续

Gesture–Drag、Rotate,Magnification
Rotate
定义Rotate变量和手势

@GestureState var angle = Angle(degrees: 0.0)
    var rotatePress : some Gesture{
        RotationGesture()
            .updating($angle){
                angle, state, transaction in
                state = angle
        }
    }

modifier

}
        .scaleEffect(self.isDetectingLongPress ? 1.1 : 1.0)
        .rotationEffect(angle)
        .gesture(tapPress)
        .gesture(rotatePress)

在这里插入图片描述

Magnification

@GestureState var magnifyBy = CGFloat(1.0)
    var magnificationPress : some Gesture{
        MagnificationGesture()
            .updating($magnifyBy){
                size, state, transcation in
                state = size
        }.simultaneously(with: rotatePress)
        .onEnded({
            _ in
            
        })
    }

modifier

 }
        .scaleEffect(magnifyBy)
        .rotationEffect(angle)
        .gesture(tapPress)
        .gesture(magnificationPress)

为了演示缩放,取消了长按改变尺寸,同步实现旋转和缩放功能。
在这里插入图片描述

拖动Drag

@State var offset: CGSize = .zero
    var dragPress: some Gesture{
        DragGesture()
        .onChanged({
            self.offset = $0.translation
        })
        .onEnded({
            if $0.translation.width < -100{
                self.offset = .init(width: -1000, height: 0)
            }else if $0.translation.width > 100{
                self.offset = .init(width: 1000, height: 0)
                
            }else{
                self.offset = .zero
            }
        })
    }

modifier

 }
        .scaleEffect(magnifyBy)
        .rotationEffect(angle)
        .offset(offset)
        .gesture(tapPress)
        .gesture(magnificationPress)
        .gesture(dragPress)

嗯,这种操作,卡片没有跟随鼠标移动,然后在长按手势后同步执行拖动手势,就可以跟随了。

var longPress: some Gesture {
            LongPressGesture(minimumDuration: 3)
                .updating($isDetectingLongPress) { currentstate, gestureState,
                        transaction in
                    gestureState = currentstate
                    transaction.animation = Animation.easeIn(duration: 0.5)
                }
                .onEnded { finished in
                    self.completedLongPress = finished
        }.simultaneously(with: dragPress)
        }
 }
        .scaleEffect(magnifyBy)
        .rotationEffect(angle)
        .offset(offset)
        .gesture(tapPress)
        .gesture(magnificationPress)
        //.gesture(dragPress)
        .animation(Animation.easeIn)

在这里插入图片描述
基本的手势使用完成!!!

猜你喜欢

转载自blog.csdn.net/jackwsd/article/details/107296156
今日推荐