ios - 平移手势视图上/下滑动动画不流畅
问题描述
我已经用 pangesture 实现了动画并且面临一些问题,因为动画看起来不流畅并且视图的位置没有设置为其实际的起始位置。
请看下图以了解动画。
以下是我处理平移手势并根据动画移动视图的代码。
@objc func wasDragged(gestureRecognizer: UIPanGestureRecognizer) {
//return
print(gestureRecognizer.state.rawValue)
let direction = gestureRecognizer.direction(in: gestureRecognizer.view!)
if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {
let translation = gestureRecognizer.translation(in: self.view)
print(gestureRecognizer.view!.center.y)
if((gestureRecognizer.view!.center.y) < minY){
gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:(minY - 1))
}
if(gestureRecognizer.view!.center.y < (self.pagingView.frame.size.height - 100) && gestureRecognizer.view!.center.y > (minY - 1)) {
gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x, y: gestureRecognizer.view!.center.y + translation.y)
}else {
if(direction == .Up){
print("UP")
if(gestureRecognizer.view!.center.y > (minY - 1 )){
gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x, y: gestureRecognizer.view!.center.y + translation.y)
}else{
gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:CGFloat(minY))
}
}else if(direction == .Down){
print("Down")
if((gestureRecognizer.view!.center.y - (minY-1)) > 100){
gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:(self.pagingView.frame.size.height - 100))
}else{
gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:minY)
}
}
}
gestureRecognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
}
}
上面代码我面临的问题是视图转换不平滑。如何实现如果用户将手指从屏幕的一半离开的逻辑,那么它应该自动将视图设置为初始部分?
解决方案
推荐阅读
- css - 2个宽度和超过三分之一宽度的媒体查询
- cocoa - NSNumberFormatter 通过 StoryBoard - Xcode 9
- java - 加速声纳扫描
- python - 更改 PySpark 中日期时间戳的显示格式
- docker - Raspbian - 存储静态内容的最佳 docker 镜像
- spring-integration-dsl - Spring Cloud Contract - 使用 AmqpInboundChannelAdapterSpec 进行消息传递的 Stub Runner
- symfony - Symfony4 / Doctrine,如何选择“不同”的对象?getResult() 返回字符串数组,而不是对象数组
- php - 升级php7.0到php7.2
- java - 在 Spring Boot 中出现异常
- clion - 我应该在 CLion 中安装工具链吗?