12
  • Xcode 7.0.1 (7A1001)
  • iOS 9.0

drawRect 関数のみを実装して、カスタム @IBDesignable UIView を作成しました。そのようです:

@IBDesignable
class CustomView: UIView {
    override func drawRect(rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        // Lots more drawing code after this
        // ...
    }
}

この drawRect を書いている間、View Controller でのこのレンダリングのいくつかの異なるインスタンスを含むストーリーボードがありました。drawRect に変更を加えて保存すると、これらの変更はほぼリアルタイムでストーリーボードに反映されます。列挙型を変更し、それに応じて別の方法で描画できる IBInspectable String さえありました。ビューはストーリーボードでサイズ変更でき、新しい幅と高さは描画コードで考慮され、描画は意図したとおりに拡大縮小および変換されます。

これはすべて正常に機能し、その UIView サブクラスに変更を加えていませんでしたが、実際にこのカスタム ビューを使用することになる新しいビューを構築しているときに、ストーリーボードのテスト ビューを削除しました。

制約をいろいろ試した後、カスタム ビューを適切な場所に配置する準備が整いました。しかし、うまくいきません。ID インスペクタがカスタム クラスを IBDesignable として認識している間、「更新中」ステータスでハングします。

カスタム uiview ibdesignable の ID インスペクタ

私が狂っていないことを証明するために、単純な drawRects または完全に空の drawRects を実装する、まったく新しい @IBDesignable UIView サブクラスを作成しました。これらは現在同じ問題を抱えており、ストーリーボードにレンダリングされていません。

これをシミュレーターで実行できることに注意してください。描画は実行時に期待どおりに表示されます。では、IBDesignable に期待する素晴らしいフィードバックを提供するストーリーボードの機能はどうなったのでしょうか?

私が試したこと:

  • クリーン/クリーン ビルド フォルダー/XCode Derived Data ディレクトリのクリア
  • XCode の再起動
  • drawRect ガッツの削除・コメントアウト
  • HelloWorld のようなチュートリアルで最もシンプルな @IBDesignables を作成する
  • 既存の既知の作業 @IBDesignables を使用する
  • ストーリーボードに新しい UIViewController を作成してカスタム ビューを配置する
  • トグル: エディター > ビューを自動的に更新
  • エディター > すべてのビューを更新
  • エディター > 選択したビューのデバッグ

これらの試みはすべて、ID インスペクタのカスタム クラス セクションに「更新中」と表示され続けます。

明らかに、私の実装を超えた何かがここで問題を引き起こしています。他にこの問題を抱えている人はいますか?誰かが私を正しい方向に向けることができますか? 他に何を試すべきかわからない。

4

1 に答える 1