【问题标题】:How to ReDraw CGRect in Swift?如何在 Swift 中重绘 CGRect?
【发布时间】:2016-02-29 02:19:19
【问题描述】:

我有 UIView 子类:

ClockFace

使用以下方式初始化:

override func drawRect(rect: CGRect) {...}

它在我的 ViewController 中表示为:

@IBOutlet weak var analogClock: ClockFace!

我重绘模拟时钟:

analogClock.drawRect(analogClock.bounds)

但是这会产生错误:

CGContextMoveToPoint:无效的上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。 致命错误:在展开可选值时意外发现 nil

我做错了什么?

【问题讨论】:

    标签: ios swift macos drawing core-graphics


    【解决方案1】:

    你可以试试analogClock.setNeedsDisplay()

    【讨论】:

    • 成功了,谢谢。关于为什么 drawRect 没有的任何想法?
    • 对于包含使用 UIKit 或 Core Graphics 的自定义内容的视图,系统调用视图的 drawRect: 方法。此方法的实现负责将视图的内容绘制到当前图形上下文中,该上下文由系统在调用此方法之前自动设置。这会创建视图内容的静态视觉表示,然后可以显示在屏幕上。 (苹果)see here
    • 如果调用setNeedsDisplay,系统会调用drawRect
    • 所以 UIView 的绘制方式不是简单地调用 drawRect(_:) 所以必须标记 stem 才能做到这一点,对吗?
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多