4

UIViewXcode でライブにレンダリングするサブクラスを作成することは可能ですか(ここでIB_DESIGNABLE説明されているように属性を追加することにより)、カスタムメソッドはありませんか?drawRect:

描画用に追加されたいくつかの を使用するカスタムUIViewサブクラスがあります (したがって、オーバーライドする必要はありません)。このクラスはアプリでは問題なく動作しますが、Xcode ではレンダリングされません。CAShapeLayerself.layerdrawRect:

コードを複製するdrawRect:と機能しますが、描画がレイヤー上で自動的に行われるようにしたいと考えています。

これはできますか?


私もやってみました

- (void)drawRect:(CGRect)rect
{
    CGContextRef currentContext = UIGraphicsGetCurrentContext();
    CGContextMoveToPoint(currentContext, self.myLayer1.frame.origin.x, self.myLayer1.frame.origin.y);
    [self.myLayer1 renderInContext:currentContext];
    CGContextMoveToPoint(currentContext, self.myLayer1.frame.origin.x, self.myLayer1.frame.origin.y);
    [self.myLayer2 renderInContext:currentContext];    
}

これはデバイスでは機能するようですが、Xcode の IB では機能しないようです。

4

3 に答える 3

2

- (void)prepareForInterfaceBuilderビューをライブ レンダリングするように IB に指示するために、このメソッドを使用してきました。

ここを参照してください:カスタム オブジェクトのライブ ビューの作成

また、この機能が Objective-C でも利用できることは正しいです。

必ずしも を使用する必要はありません。 を使用drawRectしてみてください- (void)layoutSubviews。うまくいくようです。ライブ レンダリングのためだけにコードを残しておくと- (void)layoutSubviews、パフォーマンスが低下するなどの問題があります (たとえば、 で多くのことを実行できますが- (void)awakeFromNib、そのメソッドはライブ レンダリングから呼び出されないため、セットアップもすべて で行ってください- (void)prepareForInterfaceBuilder

于 2014-10-25T21:51:34.753 に答える
0

すべてのコードを表示しないと、問題の原因を特定するのは困難ですが、質問に答えるには、はい、他の特定のメソッドを実装する必要なく IBInspectable / IBDesignable を使用できます。多くのレイヤーを使用し、描画を行わないビューに対してこれを行いました(そのためにネストされたレイヤーを使用します)。

角が丸い簡単なテスト例のスニペットの場合:

@IBDesignable
class MyView : UIView {

    @IBInspectable var cornerRadius:CGFloat {
        get { return self.layer.cornerRadius }
        set { self.layer.cornerRadius = newValue    }
    }

    @IBInspectable var borderWidth:CGFloat {
        get { return self.layer.borderWidth }
        set { self.layer.borderWidth = newValue }
    }

    @IBInspectable var borderColor:UIColor {
        get { return UIColor(CGColor: self.layer.borderColor) }
        set { self.layer.borderColor = newValue.CGColor }
    }
}

グラデーションを行う簡単な例については、この投稿を参照してください。

ライブ ビューをデバッグする方法については、WWDC §411 の 22 分あたりを参照してください。

これまでに見た唯一の制限は、クラス拡張に検査可能なプロパティを追加できることですが、それらはデバイス上でのみ適切にレンダリングされます。

于 2014-10-07T18:21:43.103 に答える