001-contents属性

2016-12-19  本文已影响26人  紫荆秋雪_文

1、CALayer 有一个属性叫做contents,这个属性的类型被定义为id,意味着它可以是任何类型的对象。在这种情况下,你可以给contents属性赋任何值,你的app仍然能够通过编译。但是,在实践中,如果你给contents赋的不是CGImage,那么你得到的图层将是空白的。

2、通过一个实例给图层的contents赋值一张图片

//
//  ViewController.m
//  002-layerView
//
//  Created by freedom on 2016/12/15.
//  Copyright © 2016年 Revan. All rights reserved.
//

#import "ViewController.h"
//#import <QuartzCore/QuartzCore.h>

@interface ViewController ()
/**
 *  layerView
 */
@property (nonatomic, strong) UIView *layerView;

/**
 *  blueLayer
 */
//@property (nonatomic, strong) CALayer *blueLayer;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 背景颜色
    self.view.backgroundColor = [UIColor darkGrayColor];
    
    // 图片
    UIImage *img = [UIImage imageNamed:@"img"];
    
    // View
    self.layerView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    self.layerView.backgroundColor = [UIColor whiteColor];
    // 给视图的图层设置图片
    self.layerView.layer.contents = (__bridge id _Nullable)(img.CGImage);
    
    
    self.layerView.contentMode = UIViewContentModeScaleAspectFit;
    //设置视图的模式
    self.layerView.layer.contentsGravity = kCAGravityCenter;
    
//    self.layerView.layer.contentsScale = img.scale;//[UIScreen mainScreen].scale;
    
    //图层内容放大
//    self.layerView.layer.contentsScale = 0.5;
    
    [self.view addSubview:self.layerView];
    
    //blueLayer
//    self.blueLayer = [CALayer layer];
//    self.blueLayer.frame = CGRectMake(50, 50, 100, 100);
//    self.blueLayer.backgroundColor = [UIColor blueColor].CGColor;
//    [self.layerView.layer addSublayer:self.blueLayer];
}


@end

3、属性contentGravity

//设置视图图层的模式
    self.layerView.layer.contentsGravity = kCAGravityCenter;

4、maskToBounds

5、contentsRect

QQ20161220-0@2x.png

contentsRect实例

原图

QQ20161220-0@2x.png
#import "ViewController.h"
//#import <QuartzCore/QuartzCore.h>

@interface ViewController ()
/**
*  iglooView
*/
@property (nonatomic, strong) UIView *iglooView;
/**
 *  coneView
 */
@property (nonatomic, strong) UIView *coneView;

/**
 *  anchorView
 */
@property (nonatomic, strong) UIView *anchorView;

/**
 *  shipView
 */
@property (nonatomic, strong) UIView *shipView;


/**
 *  blueLayer
 */
@property (nonatomic, strong) CALayer *blueLayer;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 背景颜色
    self.view.backgroundColor = [UIColor darkGrayColor];
    
    //iglooView
    self.iglooView = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 100, 100)];
    self.iglooView.backgroundColor = [UIColor redColor];
    [self.view addSubview:self.iglooView];
    
    //coneView
    self.coneView = [[UIView alloc] initWithFrame:CGRectMake(120, 100, 100, 100)];
    self.coneView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:self.coneView];
    
    //anchorView
    self.anchorView = [[UIView alloc] initWithFrame:CGRectMake(10, 210, 100, 100)];
    self.anchorView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:self.anchorView];
    
    //shipView
    self.shipView = [[UIView alloc] initWithFrame:CGRectMake(120, 210, 100, 100)];
    self.shipView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:self.shipView];
    
    
    // 图片
    UIImage *img = [UIImage imageNamed:@"hc"];
    
    [self addSpriteImage:img withContentRect:CGRectMake(0, 0, 0.5, 0.5) toLayer:self.iglooView.layer];
    
    [self addSpriteImage:img withContentRect:CGRectMake(0.5, 0, 0.5, 0.5) toLayer:self.coneView.layer];
    
    [self addSpriteImage:img withContentRect:CGRectMake(0, 0.5, 0.5, 0.5) toLayer:self.anchorView.layer];
    
    [self addSpriteImage:img withContentRect:CGRectMake(0.5, 0.5, 0.5, 0.5) toLayer:self.shipView.layer];
    
}


// 拼合图片的方法
- (void)addSpriteImage:(UIImage *) image withContentRect:(CGRect) rect toLayer:(CALayer *) layer {
    // 设置图层contents
    layer.contents = (__bridge id _Nullable)(image.CGImage);
    // 设置图片显示模式
    layer.contentsGravity = kCAGravityResizeAspect;
    
    // set contentsRect
    layer.contentsRect = rect;
//    layer.contentsCenter = rect;
    
}

剪切后的图片

QQ20161220-1@2x.png
上一篇 下一篇

猜你喜欢

热点阅读