尝试抓取屏幕上当前触摸区域的坐标,并在屏幕上绘制接收到的坐标。简单地说,一个基本的绘图应用程序,所有这些都是以编程方式编写的(对于我自己的实践)。
touchesBegan
和touchesMoved
PaintingSubclass
根本没有被调用。
我有PaintingViewController
然后我还有PaintingSubclass
。
PaintingViewController
是UIViewController
,PaintingSubclass
是UIView
。
PaintingViewController
创建PaintingSubclass
的实例,并将其添加到PaintingViewController
的子视图。
PaintingSubclass
是实际绘图的地方。touchesMoved
内加一个断点并触及开始(不起作用) UITapGestureRecognizer
(无效) self.isUserInteractionEnabled = true
(无效) PaintingSubclass
继承UIControl
并在sendActions(for: .valueChanged)
和touchesMoved
(无效)结束时致电touchesBegan
(请忽略任何不必要的变量)
import UIKit
class PaintingViewController: UIViewController{
var _paintView: PaintingSubclass? = nil
override func loadView() {
view = UILabel()
}
private var labelView: UILabel {
return view as! UILabel
}
override func viewDidLoad() {
_paintView = PaintingSubclass()
_paintView?.frame = CGRect(x: view.bounds.minX, y: view.bounds.minY, width: 400, height: 750)
_paintView?.backgroundColor = UIColor.white
_paintView?.setNeedsDisplay()
view.addSubview(_paintView!)
}
class PaintingSubclass: UIView{
private var context: CGContext? = nil
var styleSelection: String = "buttcap"
var linewidth: Float = 5
var lineCapStyle: CGLineCap? = nil
var lineJoinStyle: CGLineJoin? = nil
var lineWidthValue: CGFloat? = nil
var colorValue: UIColor? = nil
override init(frame: CGRect) {
super.init(frame: frame)
lineWidthValue = 0.5
colorValue = UIColor(cgColor: UIColor.black.cgColor)
self.isUserInteractionEnabled = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
context = UIGraphicsGetCurrentContext()!
context?.move(to: CGPoint(x: 0.0, y: 110.0))
context?.setStrokeColor((colorValue?.cgColor)!)
context?.drawPath(using: CGPathDrawingMode.stroke)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
let touch: UITouch = touches.first!
let touchPoint: CGPoint = touch.location(in: self)
let _xValue = touchPoint.x
let _yValue = touchPoint.y
NSLog("coordinate: \(_xValue), \(_yValue)")
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)
let touch: UITouch = touches.first!
let touchPoint: CGPoint = touch.location(in: self)
let _xValue = touchPoint.x
let _yValue = touchPoint.y
NSLog("coordinate: \(_xValue), \(_yValue)")
}
}
}
我在这里做错了什么?被困在这个州几个小时没有取得任何进展。任何帮助/反馈将不胜感激。
答案 0 :(得分:1)
根据您的代码,您的PaintingViewController视图是UILabel,属性isUserInteractionEnabled
默认为false。尝试将此属性设置为true可能对您有所帮助。
答案 1 :(得分:1)
我不知道您为什么要将默认视图设置为UILabel()
,但isUserInteractionEnabled
的默认view
为false。将其设置为true
override func loadView() {
view = UILabel()
view.isUserInteractionEnabled = true
}
答案 2 :(得分:1)
问题在于:
// override func loadView() {
// view = UILabel()
// }
//
// private var labelView: UILabel {
// return view as! UILabel
// }
将视图控制器的自我视图对象转换为UILabel对象。
答案 3 :(得分:0)
最好将绘画视图作为视图控制器中的主视图,将UILabel作为绘画视图的子视图。 UILabel需要在当前布局中使用userInteractionEnabled,而不是更改那个切换布局。
除了其他任何事情,大概你不希望绘画视图在标签上绘制,而是要在顶部绘制标签,因此标签应该是子视图。