在 iOS 中使用触摸绘制水平或垂直线

2024-04-18

我正在开发一个项目,我希望如果用户触摸在水平方向移动,则应绘制水平线,如果用户触摸在垂直方向移动,则应绘制垂直线。请建议一些使用 Swift 的解决方案。 我在下面尝试过。但这是自由的。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        super.touchesBegan(touches, with: event)

        let touch: AnyObject? = touches.first
        let lastPoint = touch!.previousLocation(in: holderView)
        path.move(to: CGPoint(x: lastPoint.x, y: lastPoint.y))

    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

        super.touchesMoved(touches, with: event)

        let touch: AnyObject? = touches.first
        let currentPoint = touch!.location(in: holderView)

        path.addLine(to: CGPoint(x: currentPoint.x, y: currentPoint.y))

        //Design path in layer
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = path.cgPath
        shapeLayer.strokeColor =  UIColor.orange.cgColor
        shapeLayer.lineWidth = 20.0

        holderView.layer.addSublayer(shapeLayer)

}

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

        super.touchesEnded(touches, with: event)
         path=UIBezierPath()
    }

Try this.

class DrawingView: UIView {
    var path = UIBezierPath()
    var initialLocation = CGPoint.zero
    var finalLocation = CGPoint.zero
    var shapeLayer = CAShapeLayer()

    override func awakeFromNib() {
        super.awakeFromNib()
        setupView()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func setupView(){
        self.layer.addSublayer(shapeLayer)
        self.shapeLayer.lineWidth = 20
        self.shapeLayer.strokeColor = UIColor.blue.cgColor
    }


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        if let location = touches.first?.location(in: self){
            initialLocation = location
        }
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesMoved(touches, with: event)

        if let location = touches.first?.location(in: self){
            let dx =  location.x - initialLocation.x
            let dy = location.y - initialLocation.y

            finalLocation = abs(dx) > abs(dy) ? CGPoint(x: location.x, y: initialLocation.y) : CGPoint(x: initialLocation.x, y: location.y)

            path.removeAllPoints()
            path.move(to: initialLocation)
            path.addLine(to: finalLocation)

            shapeLayer.path = path.cgPath

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

在 iOS 中使用触摸绘制水平或垂直线 的相关文章

  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • 在 IOS 中从 iPhone 删除资产(图片或视频)

    我正在开发一个 Iphone 应用程序 我可以使用 Assetslibrary 枚举资产并将它们加载到表视图中 用户可以在应用程序中删除一行 图片 视频 但如何直接从我的应用程序更新 Iphone 相册 否则 刷新时 表视图将重新加载之前删
  • 为什么 UITableViewCell 不可访问(对于 VoiceOver)

    我并不是想解决任何问题 当然你可以设置isAccessibilityEnabled true它有效 我的问题是 为什么它默认关闭并且界面生成器中没有适当的部分 在我看来 不建议使 UITableViewCell 子类可访问 有没有更好的方法
  • 通过 renderInContext 定位要绘制的视图:

    我想画一个UIView在我目前的CGGraphicsContext 我画的是UIView via renderInContext 但它的位置不正确 始终位于左上角 我拥有所有的价值观UIView可用于绘制UIView CGRect fram
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • 查找已用应用程序名称的捆绑包/开发人员

    我正在尝试将应用程序上传到应用程序商店并收到以下错误 很容易理解 The App Name you have entered has already been used 该应用程序不在 iTunes 上 有什么方法可以找出谁拥有该应用程序或
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 在 swift 中将简单字符串转换为 JSON 字符串

    我知道有一个同标题的问题here https stackoverflow com questions 30825755 convert string to json string in swift 但在那个问题中 他试图将字典转换为 JSO
  • Swift 中的柯里函数

    我想创建一个返回柯里函数的函数 如下所示 func addTwoNumbers a Int b Int gt Int return a b addTwoNumbers 4 b 6 Result 10 var add4 addTwoNumbe
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 如何使用 Core Graphics 在我的触摸位置绘制一个圆圈?

    新程序员来了 我在尝试使用 Core Graphics 在触摸位置周围绘制描边弧时遇到问题 我有绘制圆圈的方法工作正常 并且我已经测试并在点击屏幕时注册触摸 但是当我尝试在点击时调用绘制圆圈的方法时 我收到错误 CG ContextBlah
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • iOS 防止计时器 UILabel 在数字变化时“晃动”

    我有一个UILabel它以以下格式显示计时器的输出MM ss SS 分 秒 厘秒 但是随着厘秒宽度的变化 它从左向右 摇动 例如 11 比 33 窄 有什么办法可以减轻这种情况吗 我尝试过将其居中 给它固定的宽度 但它们似乎没有帮助 从iO
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • 企业发行版在 Swift 应用程序中与 iOS8 配合不佳

    我在使用 swift 应用程序在 iOS 8 设备上运行 Enterprise 版本时遇到问题 如果我使用非企业帐户进行代码签名 它似乎工作正常 有人遇到这个问题吗 以下是我在尝试使用企业帐户运行构建以进行协同设计时在 iOS 设备上收到的
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图

随机推荐

  • Queryable.OfType 如何工作?

    重要的问题不是 Queryable OfType 是什么 do 它是 我在那里看到的代码如何实现这一点 反思 Queryable OfType 我看到 经过一些清理后 public static IQueryable
  • FluentValidation LogOnFailure 覆盖

    在我的验证器类中 我有一些规则 我需要将一些验证错误记录到数据库中 这是我的验证器 RuleFor u gt u LastName Cascade CascadeMode StopOnFirstFailure NotEmpty WithMe
  • 在 AngularJS 中使用 typescript 检查 HTML 中的插值/绑定

    我知道 TypeScript 可以检测 ts 文件的编译错误 然而 如何在 AngularJS 视图 模板中获得这些好处呢 例如 如果我有这样的代码 div home property1 div 我定义了一个 HomeController
  • 如何在由 create-react-app 创建的应用程序中使用 jsx 文件(无需运行“npm runject”)?

    目前我只能使用 js 文件 如果我尝试使用 jsx 这将导致错误 问题是这样的 我通常使用代码格式化程序 而在js文件中编写jsx和格式化 会导致代码完全乱序 还会导致语法错误 我是 React 新手 所以我不知道如何配置使用 jsx 文件
  • 使用 RSPEC 进行测试时突然出现莫名其妙的活动记录连接超时

    这是一个我几乎一无所知的领域 所以提前道歉 我有一套超过 800 个 rspec 测试 当运行整个集合或只是特定的测试文件时 在其中几个之后 例如 20 个左右 尽管它从来不是完全相同的数字 突然且莫名其妙地 每个测试都开始失败并出现相同的
  • MySQL JSON 数据类型是否会影响数据检索的性能?

    假设我有一个名为的 MySQL JSON 数据类型custom properties对于媒体表 存储在 json 数据中的示例custom properties列可以是 company id 1 uploaded by Name docum
  • Mosquitto 1.4.2 Websocket 支持

    我正在尝试利用 Mosquittos 最近的更新来支持代理中的 websocket 我正在运行 Mosquitto v1 4 2 并将以下几行添加到 mosquitto 配置文件 mosquitto conf 中 listener 1000
  • 如何在 C# WPF 中让主窗口等待新打开的窗口关闭?

    我是 WPF 和 C 的新手 请耐心等待 我有一个主窗口 它打开一个新窗口 现在这个新窗口是一个提示是否覆盖文件的提示 主窗口访问新窗口中的一个公共变量来检查提示的结果 但我无法让主窗口处理等到新窗口关闭 Window1 Win new W
  • 没有 pom.xml 的 Jenkins 的加特林插件

    有没有人尝试过使用加特林插件 https wiki jenkins ci org display JENKINS Gatling Plugin对于詹金斯 但没有maven 我没有 Maven 项目 但我使用终端 bash 脚本 中的 Gad
  • 将事件传递/转发到 Qt 中的子对象

    我正在开发 Qt 应用程序 但在将鼠标事件获取到我想要的位置时遇到问题 这是我所拥有的高级视图 每个级别上还发生其他事情 这些事情决定了视图和场景的需求 App Window QMainWindow View QGraphicsView G
  • Gradle 使用不同的资源和类进行多次战争

    我有一个Java Web项目 我使用Gradle来构建项目 项目结构如下 我想使用 Gradle 构建 2 个 war main war 和 api war wars 结构如下 我已经尝试了很多次来构建这两个战争 但是当 main war
  • 如何检测重叠的圆圈并相应地填充颜色?

    我使用 3 个数组 用于 x y 和半径大小 创建了 5 个具有随机 x 和 y 坐标和半径的圆 但是 我需要圆圈根据它们是否与另一个圆圈重叠来动态改变颜色 因此 如果 5 个圆圈之一根本不重叠 则应将其涂成黑色 重叠的圆圈应为青色 如果两
  • 如何从 cron 运行的脚本运行 gpg?

    我有一个脚本 其中一部分如下所示 for file in ls tar gz do echo encrypting file gpg passphrase file home USER gnupg backup passphrase sim
  • 循环单元格中的值以在文本中替换

    这是之后的下一个问题在 Excel VBA 中循环遍历 Excel 值 https stackoverflow com questions 33699753 replacing a value in a cell with another
  • Face API 超出速率限制

    当我遇到人脸 API 超出速率限制 除了使用之外 时该怎么办Task Delay 1000 我有大约 50 条记录 并在 2 秒内检测 识别 验证 为了identifyasync 我将置信度阈值设置为 0 0f 返回的最大候选数为 50 我
  • 如何在MySQL 8.0.11中重置root密码?

    我实际上丢失了 root 密码 我需要更改它 我按照以下步骤操作 步骤 1 停止 MySQL 服务器进程 步骤 2 使用以下命令启动 MySQL mysqld 服务器 守护进程 skip grant tables 选项 这样就不会提示输入密
  • 计算字符串列表中子字符串的出现次数

    我知道计算列表项的简单出现次数很简单 gt gt gt 1 2 3 4 1 4 1 count 1 3 但我想知道如何做是每次列表条目的子字符串中出现字符串时进行计数 例如 我想看看有多少次foo出现在列表中data data the fo
  • Xcode 4 Interface Builder:如何设置文件所有者

    我定义了 myController h 和 myController m 并继续使用向导创建 myController xib 但是 我无法将 xib 文件中的控件连接到类接口 通常 当我将连接十字线放在文件所有者图标上时 它会显示已声明为
  • 为什么我的 MySQL 数据列中只保存了 64kB 数据?

    我试图将一个很长的文本字符串插入到 MySQL Blob 列中 但 MySQL 只保存了 64kB 的数据 该字符串的长度为 75360 个字符 我正在使用 PHP 连接mysql connect 有任何想法吗 它是 Blob 还是 Tex
  • 在 iOS 中使用触摸绘制水平或垂直线

    我正在开发一个项目 我希望如果用户触摸在水平方向移动 则应绘制水平线 如果用户触摸在垂直方向移动 则应绘制垂直线 请建议一些使用 Swift 的解决方案 我在下面尝试过 但这是自由的 override func touchesBegan t