我的应用程序使用PDFKit显示 PDF 文件,并允许用户通过我自己的代码使用UIKit和CoreGraphics框架对 pdf 文件进行注释。由于我想使用PencilKit框架来更好地进行注释,因此我正在实施该PencilKit框架,但我发现了一些我遇到的问题。
我所做的是添加PKCanvasView在DocumentView一个PDFView的。从本质上讲,它工作正常,我可以使用 的工具进行注释,PencilKit并且可以浏览 PDF 的页面。
当我放大 PDF 页面时出现问题。由于PKCanvasView没有在 内部缩放本身DocumentView,因此墨水注释显示为像素化。的PKCanvasView,因为它的变焦并没有改变没有重绘其与新的规模内容,并且更新contentScaleFactor使图更清晰不起作用。
另一个问题是,在某种程度上与前一个相关,由于应用程序适合每个 PDF 页面以使用所有屏幕,这使得UIScrollView包含DocumentViewPDFView 的 的缩放功能因 PDF 页面的大小而异. 这使得如果我打开一个有小页面的 PDF 和另一个大页面的 PDF,就大小(宽度 x 高度)而言,即使我选择了最小的,我也会看到不同大小的墨迹工具的线条宽度PKToolPicker两个文件的线宽。
所以我想知道是否可以将 aPKCanvasView和 PDFView 分别添加到UIViewController’s视图中,因此它们都具有相同的superview,具有相同的 ContentSize 和最大/最小缩放级别,并且在平移和缩放 时PKCanvasView,PDFView 也是如此。
无论如何,如果有解决方法,我很乐意知道。;)
有关目标的详细信息:我想从 firebase 中获取数据,以问答的格式在行中列出数据。答案将有一个文本字段来更新它。有一个保存按钮可以通过将问题和答案上传到 firebase 来保存答案。
期望与结果: 当点击以导航到屏幕时,我的主菜单中应该有一个按钮。结果是我的应用程序冻结,并且在控制台中出现以下错误。
错误
Fatal error: No ObservableObject of type AllQuestionsAndAnswersClass found.
A View.environmentObject(_:) for AllQuestionsAndAnswersClass may be missing as an ancestor of this view.: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-39.4.4/Core/EnvironmentObject.swift, line 55
2020-01-24 13:21:25.523326-0600 FirebaseStarterApp[5025:894100] Fatal error: No ObservableObject of type AllQuestionsAndAnswersClass found.
A View.environmentObject(_:) for AllQuestionsAndAnswersClass may be missing as an ancestor of this view.: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-39.4.4/Core/EnvironmentObject.swift, line 55
Run Code Online (Sandbox Code Playgroud)
我的想法 我不太确定从哪里开始,但我认为这与必须将环境对象添加到预览并在 App Delegate 中执行某些操作有关。我看过一些关于 Scene Delegate 的东西,但我只有 App Delegate,我不确定是否有区别
我尝试过的 我尝试查看以下链接,但它们对我的案例没有帮助SwiftUI @EnvironmentObject 错误:可能作为此视图的祖先丢失
这是我的 …
如何设置 PKToolPicker 初始位置?
它总是从底部开始,如果有工具栏,则覆盖工具栏。
let toolPicker = PKToolPicker.shared(for: self.view.window!)
toolPicker?.addObserver(canvas)
toolPicker?.setVisible(true, forFirstResponder: canvas)
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何修改PKDrawing属性PKCanvasView以添加一些形状,如圆形或至少添加一条线,但是它PKDrawing是一种不透明的类型,所以没有太多事情要做。
是否有任何解决方法可以在 a 上创建形状或线条PKCanvasView?
每当我在 swift 模式下运行 LLDB 表达式时,都会收到以下错误。
\n\n\n\n\n无法创建 Swift 临时上下文(无法加载 Swift\n stdlib)无法创建 Swift 临时上下文(无法加载 Swift\n stdlib)堆栈转储:\n 0。程序参数:/Applications/Xcode.app/Contents /Developer/usr/bin/lldb [1] 77539\n 分段错误 lldb
\n
我尝试导入什么并不重要。
\n\n~ \xe2\x9d\xaf\xe2\x9d\xaf\xe2\x9d\xaf lldb\n(lldb) expression -l swift -- import AppKit\nCannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:\n0. Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb\n[1] 6665 segmentation fault lldb\n~ \xe2\x9d\xaf\xe2\x9d\xaf\xe2\x9d\xaf lldb \xe2\x9c\x98 139\n(lldb) expression -l swift -- import Foundation\nCannot create Swift scratch context (couldn't load the Swift stdlib)Cannot …Run Code Online (Sandbox Code Playgroud) 想象一下当您的App项目使用两个自定义库时的这种情况
.xcworkspace
|- App.xcodeproj
|- LibraryA.xcodeproj
|- LibraryB.xcodeproj
Run Code Online (Sandbox Code Playgroud)
由于在这种情况下我们正在使用 Xcode 框架,因此可以将以下内容添加LibraryB到头文件中:
.xcworkspace
|- App.xcodeproj
|- LibraryA.xcodeproj
|- LibraryB.xcodeproj
Run Code Online (Sandbox Code Playgroud)
现在不仅不需要LibraryA在源 od 中导入LibraryB,而且每次LibraryB在App源文件中导入时,LibraryA都会随之导入,这非常方便。
这同样适用于可以在 Xcode 框架标头中找到的默认 Foundation 导入:
#import <LibraryA/MyLibraryA.h>
Run Code Online (Sandbox Code Playgroud)
现在使用 SPM,我需要在我使用它的任何地方手动导入 Foundation。
问:在单独使用 SPM 包时是否可以达到相同的结果?
我还没有找到关于这个问题的任何资源。谢谢!
如何将这些数组与 的结果结合起来(2, 4, 5, 3, 7, 6)?
array1 = Array(4,5,3,7,6)
array2 = Array(2)
Run Code Online (Sandbox Code Playgroud) 在 iOS 13/iPadOS 中使用 PencilKit 时,如何从屏幕上删除所有内容,或删除选定的内容(通过套索)?
我在 PKDrawing 或 PKCanvasView 中找不到执行这些操作的任何函数?
我\xe2\x80\x99m 使用 Swift 在一个应用程序中工作,其中包含 PencilKit 和 \xe2\x80\x9ccanvasview\xe2\x80\x9d 来记笔记。一切正常,但我无法\xe2\x80\x99t找到\xe2\x80\x9cconvert\xe2\x80\x9d de由canvasView.drawing返回的值到字符串的方法, 以便将其上传并存储到数据库中。
\n\n我可以获得图像,甚至是“base64EncodedString\xe2\x80\x9d”,但我需要一种方法将 \xe2\x80\x9cdrawing\xe2\x80\x9d 发送到服务器,然后从中加载,并显示在 canvasView 中。
\n\n我已经测试过将其转换为json,但我可以\xe2\x80\x99t \xe2\x80\x9cdeserialize\xe2\x80\x9d 并将其再次转换为\xe2\x80\x9cdrawing\xe2\x80\x9d,什么时候从服务器加载呵呵。
\n\n提前致谢
\n我正在尝试使用 PencilKit,但无法在应用程序中绘制任何内容。我设置我的代码如下。
import UIKit
import PencilKit
class DrawingViewController: UIViewController {
var canvasView: PKCanvasView!
override func viewDidLoad() {
super.viewDidLoad()
let canvasView = PKCanvasView(frame: view.bounds)
canvasView.allowsFingerDrawing = false
view.addSubview(canvasView)
canvasView.translatesAutoresizingMaskIntoConstraints = false
canvasView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
canvasView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
canvasView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
canvasView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
canvasView.backgroundColor = UIColor.lightGray
canvasView.tool = PKInkingTool(.pen, color: .black, width: 10)
}
}
Run Code Online (Sandbox Code Playgroud)
我期望在 canvasView 中绘制/墨迹,但当我尝试该应用程序时没有响应。我的设备运行的是 13.2,所以目标没有问题。我还从 WWDC 2019会议下载了 Apple 的应用程序,但它无法在模拟器中运行。为了澄清起见,我还在真实设备中测试了它,但在任何使用PencilKit的应用程序中都没有响应。