小编Jos*_*ell的帖子

在macOS上使用Swift绘制PDF

我的目标是在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开发类.

pdf macos swift

1
推荐指数
1
解决办法
1874
查看次数

具有警报级别的 UIWindow 位于状态栏级别的顶部

我有一个以模态方式呈现视图控制器的应用程序,我在不同的 UIWindows 中有一个标准的 ViewController 和一个 UIAlertController,主窗口具有正常的 UIWindowLevel 优先级,警报窗口具有 Alert UIWindowLevel 优先级,因为我希望始终将警报放在任何 ViewController 之上我在主 UIWindow 上以模态呈现(AppDelegates 参考)。我还有另一个具有状态栏优先级的 UIWindow,当我希望确保在所有内容之上都有一个不同的 ViewController 时。因此,当我使用 Alert UIWIndowLevel 优先级显示 UIWindow 并且在显示具有状态栏 UIWIndowLevel 的不同窗口之后,警报窗口中的警报显示在状态栏窗口的顶部。有什么原因吗?

我为测试而构建的示例应用程序屏幕截图

cocoa-touch uiwindow ios

1
推荐指数
1
解决办法
5138
查看次数

在小数分隔符之前和之后打印两位数的Double

我正在尝试使用以下格式打印Double:01.87或23.98.

我发现如何在点之后只打印2位数,但我没有找到如何打印2位数字.

这是我目前的代码:

let str = NSString(format: "%.2f", myValueToPrint as! Double)
Run Code Online (Sandbox Code Playgroud)

如何打印我的双倍像00.00?

cocoa cocoa-touch string-formatting swift

1
推荐指数
1
解决办法
881
查看次数

如何在 Apple Music 上从 Spotify 获取相同的曲目/歌曲,反之亦然?

我正在构建一个简单的应用程序,用户可以在其中与朋友分享他们正在听的歌曲。如果用户是 Spotify 订阅者,而他/她的朋友是 Apple Music 订阅者,并且 Spotify 用户正在分享歌曲,我如何在苹果目录中搜索相同的歌曲?是否有任何通用 ID,例如 Apple Music 上的 ISRC?或者有什么其他的比较方法?我已经知道如何使用搜索来搜索歌曲/专辑等。问题是如何确保结果与 Spotify 中的歌曲相同。有任何想法吗?谢谢!

spotify apple-musickit

1
推荐指数
1
解决办法
1496
查看次数

Swift字符串中区分大小写的字符替换

我需要区分大小写替换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参数吗?还是我做错了其他事?

string swift

1
推荐指数
1
解决办法
1051
查看次数

viewWillAppear只被调用一次

我有以下故事板.有一个OrderViewController,当我第一次打开应用程序时,它调用-(void) viewWillAppear: (BOOL) animated方法,但是当我打开另一个应用程序(将此应用程序放在后台),然后再次回到此应用程序时,viewWillAppear方法不再被调用?

在此输入图像描述

cocoa-touch uiviewcontroller ios

1
推荐指数
1
解决办法
364
查看次数

创建“User 结构上的 currentUser 类型属性”不会导致无限递归吗?

通过 Apple 的“使用 Swift 进行应用程序开发”学习 Swift 编程。我在第 2.3 章中遇到了以下任务的困难:

假设您有一个需要用户登录的应用程序。您可能有一个User类似于下图所示的结构。但是,除了跟踪特定用户信息之外,您可能还希望有一种方法来了解当前登录的用户是谁。在下面的结构上创建一个currentUser 类型属性User,并将其分配给代表您的用户对象。现在您可以通过结构体访问当前用户User 。打印出 的属性currentUser

struct User {

    var userName: String

    var email: String

    var age: Int

}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,我需要在结构中创建currentUser类型属性?这将导致无限递归,不是吗?因此,我不确定我是否正确。请帮忙澄清一下。UserUser

data-structures swift

1
推荐指数
1
解决办法
353
查看次数

在其下标getter中改变结构

在玩结构时,我发现了以下内容:

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属性时,为什么一个工作,而另一个工作?

syntax struct swift

1
推荐指数
1
解决办法
465
查看次数

将三个动画间隔一秒钟的最佳方法是什么?

有没有比使用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)

grand-central-dispatch ios swift

1
推荐指数
1
解决办法
187
查看次数

反转Swift字典中值的键,收集重复值

我有以下字典:

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循环的情况下如何做到这一点(即更优雅)?

dictionary swift

1
推荐指数
2
解决办法
613
查看次数