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)
基本的手势使用完成!!!