3

UIView に背景のグラデーションを追加するいくつかの方法を知っています。そのための最も効率的でスケーラブルな方法は何なのか、そしてその理由は何なのだろうかと考えていました。私が使用したテクニックは次のとおりです。

  • UIView のサブビューを作成し、現在のコンテキストでグラデーションを描画する drawRect を上書きします。

    a. 上記のグラデーションを使用する場合、装飾したいビューの境界で作成し、この背景グラデーションを最初のサブビューとして挿入します。– insertSubview:atIndex:

    b. 上から背景のグラデーション ビューを取得したら、それをイメージ コンテキストでレンダリングし、背景イメージとして使用します。

    UIGraphicsBeginImageContext(gradView.bounds.size);
    [gradView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *gradientImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIColor *background = [UIColor colorWithPatternImage:gradientImg];
    self.view.backgroundColor = 背景;
    
  • 伸縮可能な PNG を作成し、それを使用してビューの背景を装飾します。テクニックは、UIButton を装飾する方法と非常によく似ています。

    -(UIColor *)backgroundColor:(CGRect)frame
    {
        UIImage *bg = [UIImage imageNamed:@"background_23x36"];
        bg = [bg resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 11.0, 0.0, 11.0)];
        UIGraphicsBeginImageContextWithOptions(frame.size, YES, [[UIScreen mainScreen] スケール]);
        [bg drawInRect:frame];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return [UIColor colorWithPatternImage:image];
    }
    
  • UIView のサブビューを作成しますが、drawRect を上書きする代わりに、CAGradientLayer を使用します。http://nscookbook.com/2013/04/recipe-20-using-cagradient-layer-in-a-custom-view/と同様

では、背景としてグラデーションを追加する最も効率的でスケーラブルな方法は何ですか?

4

2 に答える 2

0

DrawRect は、私が考えるより効率的な方法です。jverrijtの素敵な答えを拡張したいと思います。アルファ コンポーネント (透明から黒のグラデーション fe) が必要な場合は、これを使用できます。

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
CGContextSaveGState(UIGraphicsGetCurrentContext());
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);
CGContextRestoreGState(UIGraphicsGetCurrentContext());

//Draw stuffs

UIGraphicsEndImageContext();
于 2013-04-12T21:03:32.923 に答える