小编Vas*_*vev的帖子

如何为String扩展添加自定义init?

如何为String扩展添加自定义init方法?

extension String {
    init(_ amount: Double, decimalPlaces: UInt) {
        self.init()
        let decimalFormat = "%0.\(String(decimalPlaces))f"
        let currencyAmount = String(format: decimalFormat, amount)
        let currencySign = NSLocalizedString("Defaults.CurrencySign", comment: "currency sign")
        let formattedString = "\(currencySign)\(currencyAmount)"
        // How to set self to `formattedString` ?
    }
}
Run Code Online (Sandbox Code Playgroud)

结果我想看到这样的事情:

let price = Double(155.15)
let formattedPrice = String(price, decimalPlaces: 2) // formattedPrice = "$155.15"
Run Code Online (Sandbox Code Playgroud)

更新:最终解决方案

extension String {
    init?(currencyAmount: Double) {
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.locale = Locale(identifier: NSLocalizedString("Defaults.LocaleCurrencyFormat", comment: "currency sign")) // Defaults.LocaleCurrencyFormat …
Run Code Online (Sandbox Code Playgroud)

initialization swift

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

如何在梯形(或圆形)中绘制文本?

让我们想象一下我有一些文字:" 有些文字是梯形的. "

我有NSAttributedString扩展,它返回带有属性文本的UIImage:

extension NSAttributedString {
    func asImage() -> UIImage? {
        defer {
            UIGraphicsEndImageContext()
        }
        let size = boundingRect(with: CGSize.zero, options: [.usesLineFragmentOrigin, .truncatesLastVisibleLine], context: nil).size
        UIGraphicsBeginImageContext(size)
        draw(at: CGPoint.zero)
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这个函数在一行中返回文本,因为使用boundingRect:

------------------------------------
|Some attributed text in trapezoid.|
------------------------------------
Run Code Online (Sandbox Code Playgroud)

如果我使用自定义rect来绘制文本,那将无济于事......

UIGraphicsBeginImageContext(CGRect(x: 0, y: 0, width: 100, height: 30))
draw(at: CGPoint.zero)
Run Code Online (Sandbox Code Playgroud)

...因为文字将是矩形:

--------------
|Some attribu|
|ted text in |
|trapezoid.  |
--------------
Run Code Online (Sandbox Code Playgroud)

我需要的是在具有已知角位置(或具有已知半径的圆圈)的梯形中绘制文本.所以每个新的文本行都应该以一点偏移量开始,参见示例: 在此输入图像描述

所以我希望看到类似的东西:

---------------
\Some attribut/
 \ed text in /
  \trapezoid/
   ---------
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到这个效果?

uikit nsattributedstring uigraphicscontext swift

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

如何在不冻结ARSession的情况下将ARSCNView放入Tabview控制器?

我正在尝试在我的应用程序(Tabbed应用程序)中实现iOS 11 beta的ARKit.但正如在ARKit会话暂停和不恢复线程中所述,每当我将选项卡更改为另一个视图控制器并返回时,ARSession就会冻结而不会恢复.

是否可以在选项卡式应用程序中实现ARSCNView,这样如果你回来我可以恢复ARSession?如果是这样怎么办?

ios ios11 xcode9-beta arkit

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

无法将'SCNMatrix4'类型的值转换为预期的参数类型'matrix_float4x4'(又名'simd_float4x4')

当我尝试设置虚拟对象的simdPosition时,我在使用iOS 11 ARKit(Scenekit - Xcode 9 beta)时出现此错误.我需要知道是否可以在swift 中将SCNMatrix4转换为matrix_float4x4.如果是这样,如何转换它.

scenekit swift ios11 xcode9-beta arkit

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