[英]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.