IOS Layerの使用(シャドウ)

6590 ワード

CALayer(レイヤ)は、画面上の矩形領域であり、各UIViewにはルートCALayerが含まれており、UIView上のすべての視覚効果はこのLayer上で行われている.
CALayerの外形特徴は主に以下の通りである.
1、層の大きさ寸法
2、背景色
3、内容(画像を埋めたり、Core Graphicsで描いたりできる内容)
4、長方形にフィレットを使用するかどうか
5、長方形に影があるかどうか
Layerにはいろいろな種類がありますが、最もよく使われているのはCALayerです.もちろん、他のサブクラスも含まれています.
CAScrollerLayer表示レイヤの一部を簡略化
CATextLayerテキストレイヤ
CAGradientLayer、CAShapeLayerなど
層を使用する前に、プロジェクトにQuartzCoreを導入する必要があります.フレームワーク
例:
新しいXCodeプロジェクトLayerSampleを作成し、QuartzCoreをインポートします.famework
LayerSampleViewControllerでhファイルに導入:
#import <QuartzCore/QuartzCore.h>
 
 
LayerSampleViewController.m  ,  :
#import "LayerSampleViewController.h"

@implementation LayerSampleViewController

- (void)loadView {
    UIView *rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
    rootView.backgroundColor = [UIColor whiteColor];
    self.view = rootView;
    [rootView release];

    //  layer
    backLayer = [CALayer layer];
    backLayer.backgroundColor = [UIColor orangeColor].CGColor;
    backLayer.bounds = CGRectMake(10, 10, 1004, 728); //  layer   
    backLayer.position = CGPointMake(1024/2, 768/2-10); //  layer  
    [self.view.layer addSublayer:backLayer];

}

- (void)dealloc {
    [super dealloc];
}

@end

プログラムの :
UIVEを するために、UIVEの を 、backLayerの をオレンジ に しました.
は の です. の4つの を に すると、 の を できます.
backLayer.cornerRadius = 20.0;// の
プログラムを すると、 は のようになります.
きサブLayer(レイヤ)を します.コード:
     //   layer
    CALayer *cyanLayer = [CALayer layer];
    cyanLayer.backgroundColor = [UIColor cyanColor].CGColor;
    cyanLayer.bounds = CGRectMake(0, 0, 300, 300);
    cyanLayer.position = CGPointMake(180, 180);
    cyanLayer.shadowOffset = CGSizeMake(0, 3); //        
    cyanLayer.shadowRadius = 10.0;  //       
    cyanLayer.shadowColor = [UIColor blackColor].CGColor; //          
    cyanLayer.shadowOpacity = 0.9; //         

    [backLayer addSublayer:cyanLayer];

を します.
サブLayerに を
//サブイメージレイヤーの
    UIImage *image = [UIImage imageNamed:@"feiche.jpg"];
    CALayer *imageLayer = [CALayer layer];
    imageLayer.frame = CGRectMake(100, 100, image.size.width, image.size.height);
    imageLayer.contents = (id) image.CGImage;
    imageLayer.shadowOffset = CGSizeMake(0, 3); //        
    imageLayer.shadowRadius = 10.0;  //       
    imageLayer.shadowColor = [UIColor blackColor].CGColor; //          
    imageLayer.shadowOpacity = 0.9; //         

    [backLayer addSublayer:imageLayer];


 
に 、コード:
imageLayer.borderColor = [UIColor grayColor].CGColor;  //    
imageLayer.borderWidth = 2.0;  //    

:
を 、コードに します.
imageLayer.cornerRadius = 10.0;  //  layer    
imageLayer.masksToBounds = YES;  //    

:
ただし、masksToBoundsプロパティをtrueに することでLayerのシャドウ はなくなります.
は、 をシャドウ のある に していました.これにより、シャドウ が を りつぶすだけであれば、2つのLayerを してシャドウ を することができます.コード:
    UIImage *image = [UIImage imageNamed:@"feiche.jpg"];
    //  layer
    CALayer *shadowLayer = [CALayer layer];
    shadowLayer.frame = CGRectMake(100, 100, image.size.width, image.size.height);
    shadowLayer.backgroundColor = [UIColor blueColor].CGColor;
    shadowLayer.shadowOffset = CGSizeMake(0, 3);
    shadowLayer.cornerRadius = 10.0;
    shadowLayer.shadowRadius = 10.0;
    shadowLayer.shadowColor = [UIColor blackColor].CGColor; //          
    shadowLayer.shadowOpacity = 1.0; //         
    [backLayer addSublayer:shadowLayer];    

    //   image layer
    CALayer *imageLayer = [CALayer layer];
    imageLayer.frame = CGRectMake(100, 100, image.size.width, image.size.height);
    imageLayer.contents = (id) image.CGImage;
    imageLayer.cornerRadius = 10.0;  //  layer    
    imageLayer.masksToBounds = YES;  //    
    imageLayer.borderColor = [UIColor grayColor].CGColor;  //    
    imageLayer.borderWidth = 2.0;
    [backLayer addSublayer:imageLayer];

の :