0

ビューをviewControllerに配置しました。このビューに長方形を描画したいのですが、カスタムの高さがあります。viewController のパラメーターに基づいて高さを決定します。たとえば。パラメータが 50 の場合、長方形の高さが UIView の 50% になるようにします。

2 つの質問:

  • 高さをカスタム drawRect に渡すにはどうすればよいですか?

  • 四角形を UIView の下部に配置するにはどうすればよいですか?

Interface Builder を使用してビューを配置し、UIView のサブクラスに drawRect を実装し、これを UIView のカスタム クラスとして使用しました。

だから私が持っているカスタムクラスで:

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();

    UIColor * lightGrayColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0];

    CGRect paperRect =  self.bounds;

    drawLinearGradient(context, paperRect, lightGrayColor.CGColor, [UIColor clearColor].CGColor);


}

void drawLinearGradient(CGContextRef context, CGRect rect, CGColorRef startColor, CGColorRef endColor)
{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGFloat locations[] = { 0.0, 1.0 };

    NSArray *colors = @[(__bridge id) startColor, (__bridge id) endColor];

    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

    CGContextSaveGState(context);
    CGContextAddRect(context, rect);
    CGContextClip(context);
    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
    CGContextRestoreGState(context);

    CGGradientRelease(gradient);
    CGColorSpaceRelease(colorSpace);
}

これにより、ビューに素敵なグラデーションの四角形が描画されますが、完全な UIView が塗りつぶされます。これは、self.bounds によるものです。

カスタム クラスにプロパティ *height を追加しましたが、viewController からこれを埋める方法がわかりません。そのため、UIView の一番下から開始し、決定した高さ (実際の高さの %) にしたいと考えています。

どうすればこれを達成できるか知っている人はいますか?

4

2 に答える 2

1

インターフェイスビルダーのアイデンティティインスペクターでカスタムビュークラスを設定しましたか?

viewController から高さプロパティを設定できます。

((MyViewClass *) self.myView).height = myCalculatedValue;

次に drawRect を実装します。

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();

    UIColor * lightGrayColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0];

    CGRect paperRect =  self.bounds;
    paperRect.origin.y = paperRect.size.height - self.height;
    paperRect.size.height = self.height;
    //assuming your height property is of CGFloat type

    drawLinearGradient(context, paperRect, lightGrayColor.CGColor, [UIColor clearColor].CGColor);
}

これにより、グラデーションが下から上の(高さ)ポイントから下に描画されます

于 2013-08-30T07:23:34.257 に答える
1

画面の高さの 50% を計算して、全画面の高さから新しいビューの高さを差し引くことができると思います

youParameter = 50; // Lets assume this is your parametere

int heightOfView   = ([UIScreen mainScreen].bounds.size.height * yourParameter) / 100;

// For placing the view to the bottom;

CGRect newFrame;
frame.origin.y = [UIScreen mainScreen].bounds.size.height - heightOfView;
frame.origin.x = 0;
frame.size.width = [UIScreen mainScreen].bounds.size.width; // assuming it will take full width
frame.size.height = heightOfView;

youViewToChange.frame = newFrame; // normally do this or

値を drawRect に渡すには、次のようにします。

[self drawRect:newFrame];
于 2013-08-30T06:31:54.880 に答える