我的目标是在PDF上编写文本,就像注释一样.
我实现了将PDFPage转换为NSImage,我绘制了NSImage,然后保存了由图像形成的PDF.
let image = NSImage(size: pageImage.size)
image.lockFocus()
let rect: NSRect = NSRect(x: 50, y: 50, width: 60, height: 20)
"Write it on the page!".draw(in: rect, withAttributes: someAttributes)
image.unlockFocus()
let out = PDFPage(image: image)
Run Code Online (Sandbox Code Playgroud)
问题显然是out(输出PDF的新页面)是图像的PDF页面而不是常规页面.因此输出PDF的大小非常大,您无法在其上复制和粘贴任何内容.这只是一系列图像.
我的问题是,如果有一种方法可以在不使用NSImage的情况下以编程方式在PDF页面上添加简单文本.任何的想法?
注意:在iOS编程中有这个类,UIGraphicsBeginPDFPageWithInfo在我的情况下可能非常有用.但我找不到类似的macOS开发类.
我有一个以模态方式呈现视图控制器的应用程序,我在不同的 UIWindows 中有一个标准的 ViewController 和一个 UIAlertController,主窗口具有正常的 UIWindowLevel 优先级,警报窗口具有 Alert UIWindowLevel 优先级,因为我希望始终将警报放在任何 ViewController 之上我在主 UIWindow 上以模态呈现(AppDelegates 参考)。我还有另一个具有状态栏优先级的 UIWindow,当我希望确保在所有内容之上都有一个不同的 ViewController 时。因此,当我使用 Alert UIWIndowLevel 优先级显示 UIWindow 并且在显示具有状态栏 UIWIndowLevel 的不同窗口之后,警报窗口中的警报显示在状态栏窗口的顶部。有什么原因吗?
我正在尝试使用以下格式打印Double:01.87或23.98.
我发现如何在点之后只打印2位数,但我没有找到如何打印2位数字.
这是我目前的代码:
let str = NSString(format: "%.2f", myValueToPrint as! Double)
Run Code Online (Sandbox Code Playgroud)
如何打印我的双倍像00.00?
我正在构建一个简单的应用程序,用户可以在其中与朋友分享他们正在听的歌曲。如果用户是 Spotify 订阅者,而他/她的朋友是 Apple Music 订阅者,并且 Spotify 用户正在分享歌曲,我如何在苹果目录中搜索相同的歌曲?是否有任何通用 ID,例如 Apple Music 上的 ISRC?或者有什么其他的比较方法?我已经知道如何使用搜索来搜索歌曲/专辑等。问题是如何确保结果与 Spotify 中的歌曲相同。有任何想法吗?谢谢!
我需要区分大小写替换Swift字符串中的字符。
我一直在使用replacingOccurrences(of:with:options:range:)内置的字符串函数将每个“ a”更改为“ / a /”,将每个“ b”更改为“ / b /”,依此类推:
stringConverted = stringConverted.replacingOccurrences(of: "a", with: "/a/", options: [])
Run Code Online (Sandbox Code Playgroud)
然后,将每个“ / a /”更改为其对应的字母“ a”。我将每个“ / b /”更改为其对应的字母“ q”,依此类推。
我的问题是我需要这种替换方式以区分大小写。我进行了查找,但是尝试了发现的内容,但没有帮助。
我需要使用range参数吗?还是我做错了其他事?
我有以下故事板.有一个OrderViewController,当我第一次打开应用程序时,它调用-(void) viewWillAppear: (BOOL) animated方法,但是当我打开另一个应用程序(将此应用程序放在后台),然后再次回到此应用程序时,viewWillAppear方法不再被调用?
通过 Apple 的“使用 Swift 进行应用程序开发”学习 Swift 编程。我在第 2.3 章中遇到了以下任务的困难:
假设您有一个需要用户登录的应用程序。您可能有一个
User类似于下图所示的结构。但是,除了跟踪特定用户信息之外,您可能还希望有一种方法来了解当前登录的用户是谁。在下面的结构上创建一个currentUser类型属性User,并将其分配给代表您的用户对象。现在您可以通过结构体访问当前用户User。打印出 的属性currentUser。Run Code Online (Sandbox Code Playgroud)struct User { var userName: String var email: String var age: Int }
如果我理解正确,我需要在结构中创建currentUser类型属性?这将导致无限递归,不是吗?因此,我不确定我是否正确。请帮忙澄清一下。UserUser
在玩结构时,我发现了以下内容:
struct SomeStruct {
private(set) var uncount: Int
subscript(i: Int) -> Int {
uncount = i // <--'self' is immutable-----
return 3
}
}
let someStructInstance = SomeStruct(uncount: 3)
someStructInstance[345]
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译,因为'self是不可变的',你不能在下标中添加mutating关键字.
但是,以下工作完美:
struct SomeStruct {
private(set) var uncount: Int
subscript(i: Int) -> Int {
get {
return 3
}
set {
uncount = i //<--works well now---
}
}
}
let someStructInstance = SomeStruct(uncount: 3)
someStructInstance[345]
Run Code Online (Sandbox Code Playgroud)
问题:当下标函数都改变了struct属性时,为什么一个工作,而另一个工作?
有没有比使用asyncAfter3 次更好的方法将这些动画间隔一秒?
let firstAnimationTime = DispatchTime.now()
let secondAnimationTime = DispatchTime.now() + 1
let thirdAnimationTime = DispatchTime.now() + 2
DispatchQueue.main.asyncAfter(deadline: firstAnimationTime) {
self.firstAnimation()
}
DispatchQueue.main.asyncAfter(deadline: secondAnimationTime) {
self.secondAnimation()
}
DispatchQueue.main.asyncAfter(deadline: thirdAnimationTime) {
self.thirdAnimation()
}
Run Code Online (Sandbox Code Playgroud) 我有以下字典:
let dict = ["key1": "v1", "key2": "v1", "key3": "v2"]
Run Code Online (Sandbox Code Playgroud)
我想交换键的值,以便结果是:
result = ["v1": ["key1", "key2"], "v2": ["key3"]]
Run Code Online (Sandbox Code Playgroud)
在不使用for循环的情况下如何做到这一点(即更优雅)?