首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适用于贴片式滑动屏幕的快速iOS动画

适用于贴片式滑动屏幕的快速iOS动画
EN

Stack Overflow用户
提问于 2016-02-04 07:36:32
回答 2查看 4K关注 0票数 2

我已经建立了一个屏幕非常类似于Tinder主屏幕。我已经设置了可拖动图标的边框和下一张卡从屏幕顶部被动画加载。目前有两个按钮(一个接受按钮,一个拒绝按钮),当他们被按下卡旋转和转换出屏幕的正确方向。这个功能目前完成了这个动画..。

代码语言:javascript
复制
func rejectAnimation() {

    let scale = CGAffineTransformMakeScale(1, 1)
    let translate = CGAffineTransformMakeTranslation(0, 0)
    self.cardUIView.transform = CGAffineTransformConcat(scale, translate)

    springWithCompletion(0.75, animations: {

        let rotate = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
        let translate = CGAffineTransformMakeTranslation((-375), 0)
        self.cardUIView.transform = CGAffineTransformConcat(rotate, translate)

        }, completion: { finished in 0
            self.refreshView()
    })
}

代码语言:javascript
复制
func acceptAnimation() {

    let scale = CGAffineTransformMakeScale(1, 1)
    let translate = CGAffineTransformMakeTranslation(0, 0)
    self.cardUIView.transform = CGAffineTransformConcat(scale, translate)

    springWithCompletion(0.75, animations: {

        let rotate = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
        let translate = CGAffineTransformMakeTranslation(375, 0)
        self.cardUIView.transform = CGAffineTransformConcat(rotate, translate)

        }, completion: { finished in 0
            self.refreshView()
    })
}

我的问题是这个。我如何动画,以便当用户拖动一张卡片,并将它放在外面,左右边界,卡片继续翻译出屏幕上的方向,它是刷卡前重置为新的卡?

注意: springWithCompletion是一个在一定时间内执行动画的函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-08 18:18:31

看看这个。用斯威夫特4写

代码语言:javascript
复制
func beingDragged(_ gestureRecognizer: UIPanGestureRecognizer) {

    xFromCenter = gestureRecognizer.translation(in: self).x
    yFromCenter = gestureRecognizer.translation(in: self).y
    switch gestureRecognizer.state {

    case .began:
        originalPoint = self.center;
        break;

    case .changed:
        let rotationStrength = min(xFromCenter / ROTATION_STRENGTH, ROTATION_MAX)
        let rotationAngel = .pi/8 * rotationStrength
        let scale = max(1 - fabs(rotationStrength) / SCALE_STRENGTH, SCALE_MAX)
        center = CGPoint(x: originalPoint.x + xFromCenter, y: originalPoint.y + yFromCenter)
        let transforms = CGAffineTransform(rotationAngle: rotationAngel)
        let scaleTransform: CGAffineTransform = transforms.scaledBy(x: scale, y: scale)
        self.transform = scaleTransform
        updateOverlay(xFromCenter)
        break;

    case .ended:
        afterSwipeAction()
        break;

    case .possible:break
    case .cancelled:break
    case .failed:break
    }
}

https://github.com/nickypatson/TinderSwipeView

谢谢

票数 6
EN

Stack Overflow用户

发布于 2016-02-04 08:00:31

只需使用UIPanGestureRecognizer并计算两个点之间的差异,以了解要动画的方向(处理程序被多次调用)。如果你需要同时动画x和y轴,那么它就变得更复杂了。

代码语言:javascript
复制
let panGesture = UIPanGestureRecognizer(target: self, action: Selector("onPan:"))
cardView.addGestureRecognizer(panGesture)

func onPan(gestureRecognizer: UIPanGestureRecognizer) {
    let point = gestureRecognizer.locationInView(maskView)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35195116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档