繁体   English   中英

图像上类似Snapchat的文字

[英]Snapchat-like text on image

我一直在尝试在图像上实现类似Snapchat的编辑文本。 到目前为止我所做的是在UIImageView的中心实现一个UILabel,我在这个UILabel中添加了3个手势:UIPanGestureRecognizer,UIPinchGestureRecognizer和UIRotationGestureRecognizer。

我已经设法实现了Pan方法,但是我很难让Pinch + Rotation像他们一样平滑,我得到了可怕的结果T_T

你们怎么看待这个? 如果您有任何阅读/观看材料我可以用来实现这一目标。

谢谢 :)

编辑:

这些是我实现处理捏合和旋转的方法:

func handlePinch(recognizer: UIPinchGestureRecognizer) {
    if let view = recognizer.view as? UILabel {
        view.transform = CGAffineTransformScale(view.transform, recognizer.scale, recognizer.scale)
    }
}

func handleRotate(recognizer: UIRotationGestureRecognizer) {
    if let view = recognizer.view as? UILabel {
        view.transform = CGAffineTransformRotate(view.transform, recognizer.rotation)
    }
}

预览我实施的压缩工作的视频: https//drive.google.com/file/d/0B-AVM51jxsvUY2RUUHdWbGo5QlU/view?usp=sharing

在此输入图像描述

找到一个解决方案,显然我需要在Rotation&Pinch中做的就是始终重置视图的旋转/比例。 例如,将我的Recognizer.scale设置为1.0,将Recognizer.rotation设置为0.0。

这是我的代码示例:

func handlePan(recognizer: UIPanGestureRecognizer) {
    let translation = recognizer.translationInView(view)
    if let view = recognizer.view {
        view.center = CGPoint(x:view.center.x + translation.x,
            y:view.center.y + translation.y)
    }
    recognizer.setTranslation(CGPointZero, inView: view)
}

func handlePinch(recognizer: UIPinchGestureRecognizer) {
    if let view = recognizer.view as? UILabel {
        let pinchScale: CGFloat = recognizer.scale
        view.transform = CGAffineTransformScale(view.transform, pinchScale, pinchScale)
        recognizer.scale = 1.0
    }
}

func handleRotate(recognizer: UIRotationGestureRecognizer) {
    if let view = recognizer.view as? UILabel {
        let rotation: CGFloat = recognizer.rotation
        view.transform = CGAffineTransformRotate(view.transform, rotation)
        recognizer.rotation = 0.0
    }
}

因为“它以非常激进的方式向上/向下扩展”:

您需要根据需要处理捏手势比例值。

根据您的识别器方法,您可以获得比例值:

    var pinchScale: CGFloat = recogniser.scale

您需要修改此值,例如根据需要将其减少/ 10或/ 100,并在标签转换中使用此值,而不是使用pangesture scale。

您遇到的问题是您的代码采用当前变换并根据当前“移动”添加另一个变换,因此您可以在单个手势中移动时累积更改(真实地复合它们)。

保持旋转,缩放和移动的实例变量,在每个手势识别器的操作中更新相关的变量(您还需要在每个手势的开头存储每个的状态,这样您就可以将delta应用于初始state),并使用这三个变量从头开始创建变换。 转换创建当然应该在一个单独的函数中进行分解,因为你将多次使用它。

我不确定这是不是你正在寻找的(我从未使用过Snapchat),但是这可以给你一些想法

https://github.com/danielinoa/DIImageView

我不确定这个有一个捏手势,但我不完全确定你的意思是如何使用它。

以下是该项目的演示: https//www.cocoacontrols.com/controls/diimageview

一般来说,我建议每次冒险实施这样的事情时检查cocoacontrols。 通常有一些坚实的例子可以帮助您入门,有时,您会找到您需要的确切内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM