Swift 3.0 - 用手指在 imageView 上绘图

2023-12-01

我一直致力于使用 swift 3.0 在图像视图上绘制红线,并遇到了一些问题。正如您可能猜到的那样,我正在使用堆栈溢出中的一些代码来帮助我进行第一次初步尝试,但遇到了一个奇怪的错误。

当我在图像视图上拖动手指时,它确实绘制了一条红线,但对于每个“帧”,它都会丢弃我在屏幕上进一步绘制的所有内容。因此,当我绘制时,看起来我正在绘制的线条正在下降,然后完全消失在屏幕之外。

我正在寻找的是能够简单地在图像视图上绘图,而不是每帧都向下移动,我希望它保持在相同的位置,类似于它在所有绘图应用程序等上的工作方式。

下面是全部代码:

@IBOutlet weak var mainImageView: UIImageView!
var lastPoint = CGPoint.zero
var fromPoint = CGPoint();
var toPoint = CGPoint.zero
var red: CGFloat = 255.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
var brushWidth: CGFloat = 10.0
var opacity: CGFloat = 1.0
var swiped = false

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint)
{
    UIGraphicsBeginImageContextWithOptions(self.mainImageView.bounds.size, false, 0);
    mainImageView.image?.draw(in: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
    let context = UIGraphicsGetCurrentContext()

    context?.move(to: fromPoint)
    context?.addLine(to: toPoint)
    context?.setLineCap(CGLineCap.round)
    context?.setLineWidth(brushWidth)
    context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0)
    context?.setBlendMode(CGBlendMode.normal)
    context?.strokePath()

    mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()
    mainImageView.alpha = opacity
    UIGraphicsEndImageContext()

}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    swiped = false;
    if let touch = touches.first {
        lastPoint = touch.location(in: self.mainImageView)
    }
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    swiped = true;
    if let touch = touches.first {
        let currentPoint = touch.location(in: mainImageView)
        drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint)
        lastPoint = currentPoint
    }
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    if(!swiped){
        self.drawLineFrom(fromPoint: lastPoint, toPoint: lastPoint)
    }
}

感谢各位的帮助!


通过以下代码,您可以使用触摸绘制图像(Swift 3.0)

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
swiped = false
if let touch = touches.first as? UITouch {
    lastPoint = touch.location(in: self.view)
}
 }
 func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {

UIGraphicsBeginImageContext(view.frame.size)
let context = UIGraphicsGetCurrentContext()
tempImageView.image?.draw(in: CGRect(x: 0, y: 0, width:     view.frame.size.width, height: view.frame.size.height))


context?.move(to: fromPoint)
context?.addLine(to: toPoint)

context?.setLineCap(CGLineCap.round)
context?.setLineWidth(brushWidth)
context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0)
context?.setBlendMode(CGBlendMode.normal)
context?.strokePath()


tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
tempImageView.alpha = opacity
UIGraphicsEndImageContext()

}

 func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
swiped = true
if let touch = touches.first as? UITouch {
    let currentPoint = touch.location(in: view)
    drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint)

    lastPoint = currentPoint
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 3.0 - 用手指在 imageView 上绘图 的相关文章

  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f
  • XCode 调试 - 我可以绕过反汇编代码的单步执行吗

    调试项目时 在 XCode 中设置断点后 我将开始单步执行代码 然后我会遇到反汇编代码 我认为这些代码是对没有可用源代码的各种框架的调用 这是一个正确的假设吗 有没有一种方法 可能通过我尚未找到的项目设置 来抑制此汇编代码的显示 而不必单步
  • 我无法捕获 WKWebView 的屏幕截图

    我正在尝试捕获 WKWebView 的屏幕截图 但我的方法无法正常工作 它返回纯色 就好像图层树为空一样 而它似乎适用于其他视图 UIImage screenshot UIImage screenshot UIGraphicsBeginIm
  • 访问iOS 7隐藏的UITableViewCellScrollView?

    苹果改变了UITableViewCelliOS 7 中的层次结构 使用iOS 6 1 SDK
  • UIViewController 作为单例

    我在标签栏应用程序中有一个 UIViewController 我已经从 MainWindow nib 文件添加了控制器 即不是以编程方式 我的问题是如何使我的视图控制器成为单例 解决 Facebook 委托问题 您可能想让您的 Facebo
  • 在 viewWillAppear( ) 中获取空值,但在 viewDidLoad( ) 中获取有效值

    When print mess 被称为来自viewDidLoad函数 它打印预期的内容 但是当从viewWillAppear函数 它给出空输出 完成分配后标签也没有更新viewDidLoad 为什么是这样 主视图控制器 if segue i
  • 如何比 CGContextStrokePath 更快地渲染线条?

    我正在使用 CGContextStrokePath 绘制约 768 个点的图表 问题是 每一秒我都会得到一个新的数据点 从而重新绘制图表 目前 这个已经很繁忙的应用程序占用了 50 的 CPU 图形绘制是在UIView 中的drawRect
  • 以编程方式更改 UISlider 的范围

    如何以编程方式设置 UISlider 的最小最大范围 例如 虚拟代码 UISlider slider UISlider alloc init slider min 3 slider max 3 EDIT 所以我有以下内容 sl minimu
  • 删除部分(红色删除按钮),UITableViewController - iOS

    我正在尝试做一个分组的 uitableview 并且我已经激活了编辑选项 我希望用户也能够删除整个部分 而不仅仅是特定行 因此 当您单击 编辑 时 每个表格单元格左侧显示的红色减号按钮也应该显示在各个部分 部分标题左侧 有人知道如何做到这一
  • UIWebView 如何检测 被点击

    我知道下面的方法可以检测链接元素点击 但我想知道是否UIView可以检测是否img元素被点击 BOOL webView UIWebView webView shouldStartLoadWithRequest NSURLRequest re
  • 在 swift 中设置状态栏的自定义颜色?

    在视图控制器上 我想将状态栏的颜色设置为黑色 但我无法更改它 我为此目的使用下面的代码 func setUpUI self navigationController setNavigationBarHidden true animated
  • 如何在 SwiftUI 中呈现视图而不将其嵌入到当前导航流中?

    我已经完成了日志记录入门 并且需要呈现一个 HomeView 它对之前的导航流程一无所知 var body some View if viewModel isValidated destination else LoadingView 通过
  • AVAssetExportSession 输出文件

    AVAssetExportSession 输出文件应该是什么样子 我正在尝试压缩 ALAsset 项目中的视频 但它不起作用 我猜输出文件与它有关 这是我正在使用的代码 NSString destinationPath NSHomeDire
  • 在 macOS 10.14 上键入文本时,NSTextView 光标不出现

    我在 macOS 10 12 Mojave 上使用 NSTextView 观察到一个奇怪的问题 我正在更改 textStorage 属性didChangeText 像这样 self textStorage beginEditing ARTo
  • Swift 中不再有“private init”?

    我看到很多关于使用的参考private init在 Swift 中限制对象构造 例如this http krakendev io blog the right way to write a singleton 但当我尝试时 在 Xcode
  • iOS 中的词干 - 不适用于单个单词

    我在用NSLinguisticTagger用于词干提取 我能够获得句子中单词的词干 但无法获得单个单词的词干 以下是我正在使用的代码 NSString stmnt i waited NSLinguisticTaggerOptions opt
  • 我正在寻找 GCDAsyncUdpSocket 上的一些示例,但发现没有一个有效

    接收数据从未被调用过 我编写了这个由我的主线调用的 swift 类UI视图控制器向接收消息的服务器发送消息 但当服务器发回响应时 客户端永远不会收到它 因为 didReceiveData 从未被触发 我一直在谷歌上搜索并查看文档 它说客户端
  • 使用排序函数按 NSDates 对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为的模型类Event import Foundation import MapKit public class Event let id Int var title String let status
  • Parse 在哪里存储用户会话

    登录代码 PFUser logInWithUsernameInBackground self userTextField text password self passwordTextField text block PFUser user

随机推荐

  • 如何将 pandas 数据帧写入 Vertica?

    我在 pandas 数据框中有一些数据集 我希望将其写入 Vertica 我已经使用 vertica python 库创建了我的表 将数据帧写入 Vertica 的最佳方式是什么 通常 在连接到 Vertica 时 您可以使用 Postgr
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • 无法约束泛型类型

    我不明白这里发生了什么 我正在为 Dictionary 集合构建一个包装器 这个想法是 当集合的大小很小时 它将使用普通的内存中的字典 但是 当达到项目的阈值数量时 它将在内部切换到磁盘上的字典 我正在使用 ManagedEsent Per
  • 更改大写字母单词的颜色[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一张有很多单词的表格 需要找到大写字母的单词并更改其颜色 例如 A1 event A2 Event A3 Happy day 并应将 A2 和 A3 中的单词颜色更改为红色
  • 如何在 Scala Actor 模型中重载 bang(!) 运算符?

    在 Scala 的 Actor 模型实现中 我们可以重写 bang 运算符吗 我们可以通过重载这个操作符来修改消息传递的操作吗 示例场景 当任何参与者调用另一个参与者时 我需要包括信息记录 演员通过传递消息 因此 通过重载消息传递 运算符
  • 检查sql server中文件是否存在?

    解决方案 http www tech recipes com rx 30527 sql server how to check if a file exists in a directory 使用 stackoverflow 问题发表了有关
  • 如何在Android中对齐TextView的文本

    希望你一切顺利 我想证明我的文本合理TextView 有什么办法可以做到这一点吗 提前致谢 XML 布局 声明 WebView 而不是 TextView
  • 我应该在 GetIntArrayElements 之后调用 ReleaseIntArrayElements 吗?

    我应该打电话吗ReleaseIntArrayElements after GetIntArrayElements JNIEXPORT void JNICALL Java com test Example func JNIEnv env jo
  • 声纳插件 Eclipse

    我可以在不安装其他 Sonar 的情况下使用 Sonar 插件吗 我正在尝试按照以下步骤使用声纳文档但它不起作用 当我尝试关联我的项目时 会出现消息 IDgroup 为空 并且当我尝试 测试连接 时无法连接 有人知道一些更好的教程或更具体的
  • 在WPF中,如何为Template中设计的FrameworkElement添加EventHandler?

    我定义了以下内容DataTemplate for ListBox外部资源字典中的项目
  • 将 MOXy 的元数据与实现 java.util.Map 的类一起使用时的 NPE

    情况 我正在使用 EclipseLink 的 MOXy 并且尝试将外部 OX 映射 XML 与实现 Map 接口的类一起使用 但是 每次我尝试创建 JAXBContext 时 都会收到以下 NPE Caused by javax xml b
  • Kinect SDK 1.7中的移交按钮事件

    我正在使用 Kinect SDK 1 7 创建一个 WPF 应用程序 我需要计算用户将手放在按钮上的次数 不是按下 只是放在上面 我发现只有一个事件负责在 XAML 中按下按钮
  • 读取换行符分隔文件并丢弃换行符的最佳方法?

    我试图确定在 Python 中读取换行符分隔文件时处理摆脱换行符的最佳方法 我想出的是以下代码 包括要测试的一次性代码 import os def getfile filename results f open filename filec
  • Mac 用户收到警告:Nokogiri 是针对 LibXML 版本 2.7.8 构建的,但已动态加载 2.7.3

    我做了各种各样的研究并尝试了很多不同的事情 我知道这个问题已经被回答过很多次了 但是所有建议的解决方案都不适合我 升级到 Lion 后 我在 Ruby 中遇到分段错误 我相当有信心那是Nokogiri 所以我通过 Homebrew 安装了
  • gnuplot 标题和轴标签被切成一半

    我已将图表标题以及 x 和 y 轴标签的字体大小更改为双倍大小 现在标题和轴标签更大了 但它们被切成两半并延伸到图表本身 是否有一个选项可以设置标题的边距 以便完整地绘制它们并且不会触及图表 我使用 gnuplot 4 6 patchlev
  • Json提取和使用数据(node.js)

    我如何访问这些数据 这是我的 Json 6a768d67 82fb 4dd9 9433 d83dbd2f1b78 name Bahut 11 timestamp 1380044486000 value false 4f4a65e4 c41b
  • 从 WP7 上传 XML 文件,可能吗?如何上传?

    我正在研究一个系统 用户可以将 xml 文件上传到网站以供其他人稍后下载 我在这个部门的经验很少 真的不知道从哪里开始 所以这是一个相当简单的问题 我该如何实施这样的事情 我需要 ASP 托管还是其他东西 是的 您需要某种形式的网站 服务托
  • Angular JS 类型号在 Firefox 中不起作用

    请检查此代码
  • 无法将 TextMeshPro 文本获取到 Unity 中的变量槽

    using TMPro public TextMeshPro livesText public TextMeshPro scoreText 我无法将文本从层次结构拖动到检查器中的变量槽 为什么会这样 请帮忙 你似乎在谈论一个TextMesh
  • Swift 3.0 - 用手指在 imageView 上绘图

    我一直致力于使用 swift 3 0 在图像视图上绘制红线 并遇到了一些问题 正如您可能猜到的那样 我正在使用堆栈溢出中的一些代码来帮助我进行第一次初步尝试 但遇到了一个奇怪的错误 当我在图像视图上拖动手指时 它确实绘制了一条红线 但对于每