1、两种绘制方式:
首先给出代码:
//
// MyView.h
// 07-绘制图片
//
#import <UIKit/UIKit.h>
@interface MyView : UIView
- (instancetype)initWithImage:(UIImage *) image;
@end
//
// MyView.m
// 07-绘制图片
//
#import "MyView.h"
@interface MyView ()
{
UIImage * _image;
}
@end
@implementation MyView
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
*/
- (instancetype)initWithImage:(UIImage *) image {
if (self = [super init]) {
_image = image;
}
return self;
}
- (void)drawRect:(CGRect)rect {
// Drawing code
// [_image drawAtPoint:rect.origin];
[_image drawInRect:rect];
}
@end
当调用drawInRect时:
当调用drawAtPoint时
3、指定方式绘制图片
测试代码:
//
// MyView.h
// 07-绘制图片
//
#import <UIKit/UIKit.h>
@interface MyView : UIView
- (instancetype)initWithImage:(UIImage *) image;
@end
<pre name="code" class="objc">//
// MyView.m
// 07-绘制图片
//
#import "MyView.h"
@interface MyView ()
{
UIImage * _image;
}
@end
@implementation MyView
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
*/
- (instancetype)initWithImage:(UIImage *) image {
if (self = [super init]) {
_image = image;
}
return self;
}
- (void)drawRect:(CGRect)rect {
// Drawing code
UIImage * imageBG = [UIImage imageNamed:@"huizhi2.jpg"];
[imageBG drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];
[_image drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor grayColor];
UIImage * image = [UIImage imageNamed:@"huizhi1.jpg"];
MyView * myView = [[MyView alloc] initWithImage:image];
myView.bounds = CGRectMake(0, 0, 200, 200);
myView.center = self.view.center;
myView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:myView];
}
两张原图(其中狗狗为前景图,红白格子为背景图):
(1)、直接绘制前景图
[_image drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];
[_image drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];
(2)、前景与背景暗色渐变合成
[_image drawInRect:rect blendMode:kCGBlendModeMultiply alpha:1.0];
(3)、前景与背景亮色渐变合成
[_image drawInRect:rect blendMode:kCGBlendModeScreen alpha:1.0];
(4)、保持背景的高亮及阴影与前景的合成
[_image drawInRect:rect blendMode:kCGBlendModeOverlay alpha:1.0];
(5)、以前景与背景各色的暗点进行合成
[_image drawInRect:rect blendMode:kCGBlendModeDarken alpha:1.0];
(6)、以前景与背景各色的亮点进行合成
[_image drawInRect:rect blendMode:kCGBlendModeLighten alpha:1.0];
(7)、黑烧效果(忽略黑色)
[_image drawInRect:rect blendMode:kCGBlendModeColorDodge alpha:1.0];
(8)、白烧效果(忽略白色)
[_image drawInRect:rect blendMode:kCGBlendModeColorBurn alpha:1.0];
(9)、柔光
[_image drawInRect:rect blendMode:kCGBlendModeSoftLight alpha:1.0];
(10)、强光
(11)、色差绝对值
[_image drawInRect:rect blendMode:kCGBlendModeDifference alpha:1.0];
(12)、除外(小差别的kCGBlendModeDifference)
[_image drawInRect:rect blendMode:kCGBlendModeExclusion alpha:1.0];
(13)、前景与背景色相合成
[_image drawInRect:rect blendMode:kCGBlendModeHue alpha:1.0];
(14)、背景的辉度/色相与前景的彩度合成
[_image drawInRect:rect blendMode:kCGBlendModeSaturation alpha:1.0];
(15)、背景的辉度与前景的色相及彩度合成
[_image drawInRect:rect blendMode:kCGBlendModeColor alpha:1.0];
(16)、背景的色相/彩度与前景的辉度合成
[_image drawInRect:rect blendMode:kCGBlendModeLuminosity alpha:1.0];
4、扩大/缩小时的伸缩区域限制
这个前面已经说过了,详见:http://blog.youkuaiyun.com/lvdezhou/article/details/50014571
5、UIImageView实现动画
UIImage * image1 = [UIImage imageNamed:@"image1.jpg"];
UIImage * image2 = [UIImage imageNamed:@"image2.jpg"];
UIImage * image3 = [UIImage imageNamed:@"image3.jpg"];
UIImageView * imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(100, 100, 100, 100);
imageView.animationImages = @[image1, image2, image3];
//每个0.3秒改变一次
imageView.animationDuration = 0.3;
imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
[self.view addSubview:imageView];
[imageView startAnimating];//适当的时候开始动画
[imageView stopAnimating];//适当的时候停止动画
/*
UIViewAutoresizingNone就是不自动调整。
UIViewAutoresizingFlexibleLeftMargin 自动调整与superView左边的距离,保证与superView右边的距离不变。
UIViewAutoresizingFlexibleRightMargin 自动调整与superView的右边距离,保证与superView左边的距离不变。
UIViewAutoresizingFlexibleTopMargin 自动调整与superView顶部的距离,保证与superView底部的距离不变。
UIViewAutoresizingFlexibleBottomMargin 自动调整与superView底部的距离,也就是说,与superView顶部的距离不变。
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,保证与superView左边和右边的距离不变。
UIViewAutoresizingFlexibleHeight 自动调整自己的高度,保证与superView顶部和底部的距离不变。
*/