Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS18适配指南之PencilKit

iOS18适配指南之PencilKit

作者头像
YungFan
发布于 2025-02-10 05:38:44
发布于 2025-02-10 05:38:44
5500
代码可运行
举报
文章被收录于专栏:学海无涯学海无涯
运行总次数:0
代码可运行

介绍

  • 调色板支持自定义工具选项。
  • 调色板工具支持自定义。

案例

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import PencilKit
import UIKit

class ViewController: UIViewController {
    lazy var canvasView: PKCanvasView = {
        let canvasView = PKCanvasView()
        canvasView.translatesAutoresizingMaskIntoConstraints = false
        return canvasView
    }()
    // 调色板
    lazy var toolPicker: PKToolPicker = {
        //  iOS18新增,自定义调色板工具选项
        var config = PKToolPickerCustomItem.Configuration(identifier: "customTool", name: "pencil.and.scribble")
        config.imageProvider = { toolItem in
            guard let toolImage = UIImage(systemName: config.name) else {
                return UIImage()
            }
            return toolImage
        }
        config.allowsColorSelection = true
        config.defaultColor = .red
        config.defaultWidth = 10.0
        let customItem = PKToolPickerCustomItem(configuration: config)
        // iOS18新增,自定义中间区域的调色板工具
        let toolPicker = PKToolPicker(toolItems: [PKToolPickerInkingItem(type: .pen), PKToolPickerLassoItem(), PKToolPickerRulerItem(),
                                                  PKToolPickerEraserItem(type: .bitmap), PKToolPickerScribbleItem(), customItem])
        return toolPicker
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(canvasView)
        setToolPicker()
    }

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()

        NSLayoutConstraint.activate([
            canvasView.topAnchor.constraint(equalTo: view.topAnchor),
            canvasView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            canvasView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            canvasView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        ])
    }

    // MARK: 为PKCanvasView设置PKToolPicker
    func setToolPicker() {
        toolPicker.addObserver(canvasView)
        toolPicker.setVisible(true, forFirstResponder: canvasView)
        // iOS18新增,自定义右侧附加选项
        toolPicker.accessoryItem = UIBarButtonItem(image: UIImage(systemName: "square.and.arrow.down.fill"), primaryAction: UIAction(handler: { [self] _ in
            self.saveDrawing()
        }))
        canvasView.becomeFirstResponder()
    }

    // MARK: 保存绘画内容到相册
    func saveDrawing() {
        let drawing = canvasView.drawing
        let image = drawing.image(from: canvasView.frame, scale: UIScreen.main.scale)
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AVKit框架详细解析(三) —— 基于视频播放器的画中画实现(二)
源码 1. Swift 接着就是源码了 1. AppDelegate.swift import AVKit import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.Laun
conanma
2021/09/04
1.9K0
「 UITableView 入门 」新人解决列表 Cell 高度自适应,UITableViewCell 高度自适应
一、前言 我们在写列表的时候,经常出现每一个 Cell 高度不一样的情况,但是 iOS 这边是在是太不智能了 比起隔壁 android 的 RecyclerView ,人家可以自动更具每一项高度,来进行伸缩变化,iOS 的列表控件 UITableView 竟然都不能直接自适应列表高度 二、效果 其实具体的实现并不难,只是没学过的人肯定搞不出来,开始前这里可以先看下效果 大致就是 UITableView 会自动计算每一个 cell 的高度,伸缩变换后显示出来,网上有很多类似的帖子,但是大都纸上谈兵,没图没代码
圆号本昊
2021/09/24
2.3K0
「 UITableView 入门 」新人解决列表 Cell 高度自适应,UITableViewCell 高度自适应
iOS18适配指南之UIViewController
增加了类型为UIViewController.Transition的preferredTransition属性,可以实现特殊的转场效果,共有 5 种效果,分别为zoom、coverVertical、flipHorizontal、crossDissolve与partialCurl。
YungFan
2024/09/09
4480
iOS18适配指南之Symbol Animations
YungFan
2024/09/09
1830
iOS18适配指南之UITabBarController
YungFan
2024/09/17
1.5K0
iOS17适配指南之UIContentUnavailableView(一)
YungFan
2023/07/24
5370
iOS17适配指南之UIContentUnavailableView(一)
iOS17适配指南之UIViewController
YungFan
2023/07/09
9130
iOS17适配指南之UIViewController
iOS18适配指南之UITableView
YungFan
2024/09/27
2890
iOS14开发-菜单
iPhone 11 之前,有一种主屏交互方式称之为 3D Touch,现在已经改为 Haptic Touch。 它是一种立体触控技术,可感应不同的触控压力。通过该技术可以给 App 设置最多 4 个不同的 ShortcutItem(快捷操作菜单),实现方式分为静态和动态两种。
YungFan
2021/11/24
8310
iOS16适配指南之UINavigationItem
增加了类型为 UINavigationItem.ItemStyle 的属性style用于描述 UINavigationItem 在 UINavigationBar 上的布局,共有 3 种样式:navigator(默认样式),browser(浏览器样式)与editor(编辑器样式)。 // Created by YungFan import UIKit class ViewController: UIViewController { override func viewDidLoad() {
YungFan
2022/08/23
1.5K0
iOS18适配指南之UITrait
系统能够自动监听并且处理特征值的改变,不再需要UITraitChangeObservable协议中的特征变化注册方法registerForTraitChanges()。
YungFan
2024/09/13
2380
iOS18适配指南之UITrait
系统能够自动监听并且处理特征值的改变,不再需要UITraitChangeObservable协议中的特征变化注册方法registerForTraitChanges()。
YungFan
2025/02/10
600
iPhoneX 适配实践
一、屏幕尺寸 1、规格: iPhone X 的屏幕宽度同 iPhone 6、iPhone 6s、iPhone 7 和 iPhone 8 的 4.7 英寸屏幕宽度相同,即 375pt。屏幕垂直高度增加了
张添富
2017/10/17
3.9K0
iPhoneX 适配实践
iOS17适配指南之TipKit
YungFan
2023/09/06
6290
iOS17适配指南之TipKit
iOS18适配指南之UITextView
YungFan
2024/09/09
4090
SwiftUI TextField 进阶 —— 事件、焦点、键盘
本文将探讨涉及 SwiftUI TextField 的事件、焦点切换、键盘设置等相关的经验、技巧和注意事项。
东坡肘子
2022/07/28
13.6K0
SwiftUI TextField 进阶 —— 事件、焦点、键盘
iOS14开发-定位与地图
CoreLocation 是 iOS 中用于设备定位的框架。通过这个框架可以实现定位进而获取位置信息如经度、纬度、海拔信息等。
YungFan
2021/07/14
2.5K0
iOS17适配指南之UIContentUnavailableView(二)
iOS17适配指南之UIContentUnavailableView(一)主要讲解了 UIContentUnavailableView 的基本使用与 UIContentUnavailableConfiguration 的两种配置empty()、loading()。本文将介绍另外一种配置search()以及如何使用 SwiftUI 自定义配置。
YungFan
2023/07/25
4590
iOS17适配指南之UIContentUnavailableView(二)
iOS18适配指南之UIUpdateLink
YungFan
2024/09/09
3280
iOS14开发-UIView
在 iOS 13 中引入了新的 API — Diffable Data Source,它不仅能够驱动 UITableView 和 UICollectionView,而且可以更简单高效的实现数据的刷新。
YungFan
2021/01/21
12.1K0
相关推荐
AVKit框架详细解析(三) —— 基于视频播放器的画中画实现(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验