Ios 为什么可以';当我将UIView子类化时,我是否在图像上绘制?
我正在尝试使用来自的代码从摄影机卷上绘制图像。从照相机滚轮中选择照片后,Ios 为什么可以';当我将UIView子类化时,我是否在图像上绘制?,ios,swift,uiview,uiimageview,uipangesturerecognizer,Ios,Swift,Uiview,Uiimageview,Uipangesturerecognizer,我正在尝试使用来自的代码从摄影机卷上绘制图像。从照相机滚轮中选择照片后,imageView被设置为照片。当用户按下绘图按钮时,会在照片上方添加tempImageView,以便用户可以在照片上绘图。然而,当我试图在图像上画画时,什么也没有发生。为什么? 代码: 确保tempmageview.userIteractionEnabled=YES。默认情况下,UIImageView的此属性为否。 将断点放入GestureRecognitor方法后,查看是否正在调用该方法。不必亲自尝试:至少在draw()
imageView
被设置为照片。当用户按下绘图按钮时,会在照片上方添加tempImageView
,以便用户可以在照片上绘图。然而,当我试图在图像上画画时,什么也没有发生。为什么?
代码:
确保tempmageview.userIteractionEnabled=YES。默认情况下,UIImageView的此属性为否。
将断点放入GestureRecognitor方法后,查看是否正在调用该方法。不必亲自尝试:至少在draw()中将tempImageView的帧原点设置为(0,0)(也就是说,不要使用未更改的父边界),并在drawRect()中绘制路径之前设置线宽
class EditViewController: UIViewController{
var tempImageView: DrawableView!
var imageView: UIImageView = UIImageView(image: UIImage(named: "ClearImage"))
func draw(sender: UIButton!) {
tempImageView = DrawableView(frame: imageView.bounds)
tempImageView.backgroundColor = UIColor.clearColor()
self.view.addSubview(tempImageView)
}
}
class DrawableView: UIView {
let path=UIBezierPath()
var previousPoint:CGPoint
var lineWidth:CGFloat=10.0
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override init(frame: CGRect) {
previousPoint=CGPoint.zero
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
previousPoint=CGPoint.zero
super.init(coder: aDecoder)
let panGestureRecognizer=UIPanGestureRecognizer(target: self, action: "pan:")
panGestureRecognizer.maximumNumberOfTouches=1
self.addGestureRecognizer(panGestureRecognizer)
}
override func drawRect(rect: CGRect) {
// Drawing code
UIColor.greenColor().setStroke()
path.stroke()
path.lineWidth=lineWidth
}
func pan(panGestureRecognizer:UIPanGestureRecognizer)->Void
{
let currentPoint=panGestureRecognizer.locationInView(self)
let midPoint=self.midPoint(previousPoint, p1: currentPoint)
if panGestureRecognizer.state == .Began
{
path.moveToPoint(currentPoint)
}
else if panGestureRecognizer.state == .Changed
{
path.addQuadCurveToPoint(midPoint,controlPoint: previousPoint)
}
previousPoint=currentPoint
self.setNeedsDisplay()
}
func midPoint(p0:CGPoint,p1:CGPoint)->CGPoint
{
let x=(p0.x+p1.x)/2
let y=(p0.y+p1.y)/2
return CGPoint(x: x, y: y)
}
}