0

実装したUIControlサブクラスがありdrawRectます。drawRectを使用してメソッド内に長方形を描画しようとしていUIBezierPathます。すべての適切なメソッドが呼び出され、null はなく、アプリは問題なく実行されます。問題は、フレームだけが描画されることです。つまり、黒いのでフレームの領域は見えますが、フレームに描かれたものは何も見えません。

クラスをインスタンス化するために私がやっていることは次のとおりです。

ZHButton *button =
    [[ZHButton alloc] initWithFrame:CGRectMake(100, 200, 100, 50)];
button.buttonType = NSSelectorFromString(LEFT_ROUNDED_CORNER_BUTTON);
[self.view addSubview:button];

以下は、セレクターを使用してさまざまなメソッドを呼び出す drawRect: メソッドです。

- (void)drawRect:(CGRect)rect {
    UIBezierPath *button = [self performSelector:self.buttonType withObject:nil];
    [[UIColor orangeColor] setFill];
    [button fill];
}

- (UIBezierPath *)drawButtonWithLeftCornersRounded {
        return [UIBezierPath bezierPathWithRoundedRect:self.frame
                                     byRoundingCorners:UIRectCornerTopLeft |
                                                       UIRectCornerBottomLeft
                                           cornerRadii:buttonRadii];
}

すべて正常に動作しているように見えますが、UIBezierPath描画されません。また、セレクターを使用することがこれを行うための最良の方法であるかどうかもわかりません。これで何が起こっているか知っている人はいますか?

4

2 に答える 2

0

drawButtonWithLeftCornersRoundedメソッドを呼び出していないようです。この行は間違っていると思います:

[self performSelector:self.buttonType withObject:nil];

ただし、次のようにする必要があります。

[self performSelector:@selector(drawButtonWithLeftCornersRounded) withObject:nil];

お役に立てれば!

于 2013-09-23T19:34:22.493 に答える
0

解決しました。であってはdrawButtonWithLeftCornersRounded bezierPathWithRoundedRectなりませんself.frame。これにより、x 座標と y 座標が、ビューではなく、フレーム内の x、y の位置になります。パラメータを次のように変更しました。

CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
于 2013-09-23T20:04:01.660 に答える