我怎样才能添加大小手柄到UIView?
我想在用户请求运行时dynamic创build视图(UIImageView和UITextView),然后允许用户移动和调整它们的大小。 除了resize之外,我已经做好了一切工作。 我尝试使用捏手势识别器,但发现它太笨拙,我想要的。 所以,我想用大小手柄。 我相信我可以在每个手柄上放置一个平移手势识别器,并调整视图框架,因为它们之一被移动。
问题是,我不太清楚如何创build大小调整手柄。 我会指出我尝试过的所有事情,但是如实地说,我不太确定从哪里开始。 我有几个想法…
1)可能使用coregraphics在angular落和边上画框或圆圈? 我会创build一个新的图层并在其上绘制它们吗? 不确定。
2)在每个angular落贴一个方块或圆圈的小图像?
3)手柄已经放在它的XIB文件?
任何build议感激。 我只需要指出正确的方向。
编辑:像苹果在页面中使用的东西将是完美的!
首先,我build议为UIView创build一个自定义的View子类,你将在这里处理所有的行为。 我们称之为ResizableView。
在自定义视图中,您需要在angular落绘制这些点的图层或视图,然后为其添加PangestureRecognized。然后您可以使用recognizer.locationInView()
来跟踪这些点的位置,当用户拖动它们时,您将使用它来计算View.Here是您可以参考的代码:
func rotateViewPanGesture(recognizer: UIPanGestureRecognizer) { touchLocation = recognizer.locationInView(self.superview) let center = CalculateFunctions.CGRectGetCenter(self.frame) switch recognizer.state { case .Began: initialBounds = self.bounds initialDistance = CalculateFunctions.CGpointGetDistance(center, point2: touchLocation!) case .Changed: //Finding scale between current touchPoint and previous touchPoint let scale = sqrtf(Float(CalculateFunctions.CGpointGetDistance(center, point2: touchLocation!)) / Float(initialDistance!)) let scaleRect = CalculateFunctions.CGRectScale(initialBounds!, wScale: CGFloat(scale), hScale: CGFloat(scale)) self.bounds = scaleRect self.refresh() case:.Ended: self.refresh() default:break
一步步
Pangesture的touchLocation
位置
center
是ResizableView的中心
initialBounds
是PanGesture开始时ResizableView的初始边界。
initailDistance
是用户拖动的点的touchPoint的ResizableView的中心点之间的距离。
然后你可以计算给定initialDistance
center
, center
, touch location
的scale
现在你已经按照你的想法缩放了视图。 你也需要相应地刷新这些点的位置,这就是refresh()
的作用,你需要自己去实现它。
CalculateFunctions
我倾向于定义一些帮助函数来帮助我计算。
CalculateFunctions.CGPointGetDistance
用于计算视图中心与触摸位置之间的距离。
CalculateFunctions.CGRectScale
返回给定刚刚计算的比例的缩放CGRect。
CalculateFunctions.CGRectGetCenter
返回一个CGRect的中心点
这只是一个粗略的想法。 其实有很多你可以参考的库。 一些build议:
- SPUserResizableView这是一个ResizableView正是你想要的,但它是用ObjC编写的,并且很久没有更新。 但你可以参考它。
- JLStickerTextView这可能不适合你的要求,因为它是用于文本(编辑,resize,用一根手指旋转)但是,这是用Swift编写的,这是一个很好的例子。
如果您有任何问题,请随时发布。良好运气:-)