- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个单页应用程序,我想包含一个签名框,以便我的客户可以在我的 iPad 上签名。
我用谷歌搜索了它的生活,但无法弄清楚。我是 Swift 新手,并不能 100% 理解它。我有一些来自 YouTube channel 的代码,但这使用了整个屏幕。
import UIKit
class Canvas: UIView {
override func draw(_ rect: CGRect) {
//custom drawing
super.draw(rect)
guard let context = UIGraphicsGetCurrentContext() else { return }
//her are my lines
// dummy data
// let startPoint = CGPoint(x: 0, y: 0)
// let endPoint = CGPoint(x: 100, y: 100)
//
// context.move(to: startPoint)
// context.addLine(to: endPoint)
context.setLineCap(.round)
lines.forEach { (line) in
for (i, p) in line.enumerated() {
if i == 0 {
context.move(to: p)
} else {
context.addLine(to: p)
}
}
}
context.strokePath()
}
//var line = [CGPoint]()
var lines = [[CGPoint]]()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
lines.append([CGPoint]())
}
//track finger as we move accross the screen
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let point = touches.first?.location(in: nil) else {return}
//print(point)
guard var lastLine = lines.popLast() else {return}
lastLine.append(point)
lines.append(lastLine)
//var lastLine = lines.last
//lastLine?.append(point)
//line.append(point)
setNeedsDisplay()
}
}
class ViewController: UIViewController {
let canvas = Canvas()
override func loadView() {
self.view = canvas
}
override func viewDidLoad() {
super.viewDidLoad()
canvas.backgroundColor = .white
}
}
这是我最新的代码:
//
// ViewController.swift
// Draw
//
// Created by Terry Cooke on 25/05/2019.
// Copyright © 2019 Terry Cooke. All rights reserved.
//
import UIKit
class Canvas: UIView {
@IBOutlet weak var canvas: Canvas!
override func draw(_ rect: CGRect) {
//custom drawing
super.draw(rect)
guard let context = UIGraphicsGetCurrentContext() else {return}
context.setLineCap(.round)
lines.forEach { (line) in
for (i, p) in line.enumerated() {
if i == 0 {
context.move(to: p)
} else {
context.addLine(to: p)
}
}
}
context.strokePath()
}
var lines = [[CGPoint]]()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
lines.append([CGPoint]())
}
//track finger as we move accross the screen
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let point = touches.first?.location(in: nil) else {return}
//print(point)
guard var lastLine = lines.popLast() else {return}
lastLine.append(point)
lines.append(lastLine)
setNeedsDisplay()
}
}
class ViewController: UIViewController {
//let canvas = Canvas()
//override func loadView() {
//self.view = canvas
//}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .blue
//view.addSubview(canvas)
//canvas.translatesAutoresizingMaskIntoConstraints = false
//NSLayoutConstraint.activate([
// canvas.widthAnchor.constraint(equalToConstant: 600),
// canvas.heightAnchor.constraint(equalToConstant: 250),
// canvas.centerXAnchor.constraint(equalTo: view.centerXAnchor),
// canvas.centerYAnchor.constraint(equalTo: view.centerYAnchor)
// ])
//
//canvas.backgroundColor = .white
}
//canvas.backgroundColor = .white
}
这允许您在整个屏幕上进行绘制,但我会在 View 框或图像中包含它。
最佳答案
如果您只想要一个签名框,请将您的 Canvas
设为 view
的 subview :
摆脱loadView()
并执行以下操作:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .blue
view.addSubview(canvas)
canvas.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
canvas.widthAnchor.constraint(equalToConstant: 600),
canvas.heightAnchor.constraint(equalToConstant: 250),
canvas.centerXAnchor.constraint(equalTo: view.centerXAnchor),
canvas.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
canvas.backgroundColor = .white
}
您还需要修复触摸点以将其显示在 View 本身中:
更改:
guard let point = touches.first?.location(in: nil) else {return}
到:
guard let point = touches.first?.location(in: self) else {return}
<小时/>
使用 Storyboard布置 Canvas :
您可以直接在 Storyboard 中添加 Canvas
View ,而不是使用代码布局 Canvas
:
let canvas = Canvas()
以及将其添加为 View 或 subview 的代码。UIView
并将其放置在 UIImageView
上方您想要的位置。添加从 Canvas
边缘到 UIImageView
边缘的约束。Canvas
View ,并在身份检查器中将其类更改为 Canvas
。控制从 Canvas
View 拖动到您的代码,并添加名为 canvas
的 @IBOutlet
:
@IBOutlet weak var canvas: Canvas!
清除 Canvas
将此函数添加到您的 Canvas
类中:
func clearCanvas() {
lines = []
self.setNeedsDisplay()
}
向 ViewController
添加一个 Clear
按钮,并使用 canvas
导出调用 canvas.clearCanvas()
删除Canvas
:
@IBAction func clear(_ sender: UIButton) {
canvas.clearCanvas()
}
关于ios - 在 iOS 中画一个方框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56304934/
我想以 headless 模式(屏幕上根本没有 GUI)将 JPanel 绘制到 BufferedImage 中。 final JPanel panel = createPanel(); panel.
我是 Canvas 的新手,正在尝试创建看起来逼真的 float 粒子动画。 目前,我正在创建 400 个随机散布在 400x400 Canvas 上的粒子。 然后,在每个 requestAnimat
有没有办法在悬停时停止悬 float 画? :hover 这是一个显示动画的链接: https://codepen.io/youbiteme/pen/RprPrN 最佳答案 只需为您的 svg 悬停添
我想在谷歌地图上绘制覆盖图,其中除了特定点周围 1.5 公里半径以外的所有内容都被遮蔽了。为此,我尝试使用带有大量边框的圆圈,所以我会在边框中放置透明中心和覆盖颜色来实现这一点,但它无法渲染。
我正在尝试通过扩展类 UIView 来创建自定义 View ,该类可以在自定义 View 的中心显示一个圆圈。为了添加自定义绘图,我重写了 draw(_ rect: CGRect) 方法,如下所示。
我是一名优秀的程序员,十分优秀!