1.平铺图片
项目里有需要平铺图片作为背景处理的情况,常用的平铺方式有两种
- 使用
colorWithPatternImage
UIImageView *testIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, Screen_Height)];
UIImage *testImage = [UIImage imageNamed:@"starBg"];
testIV.backgroundColor = [UIColor colorWithPatternImage:testImage];
- 使用
resizableImageWithCapInsets:resizingMode:
UIImageView *testIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, Screen_Height)];
UIImage *testImage = [UIImage imageNamed:@"starBg"];
UIImage *resizableImage = [testImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile];
testIV.image = resizableImage;
2.Quartz2D绘制图片反转问题
直接使用CGContextDrawImage
会使绘制的图片存在上下颠倒的问题,这是由于Quartz2D的坐标系原点在左下角造成的(从左下角开始,往上为Y轴正方向,往右为X轴正方向)。原本从左上角开始绘制的图片,会从左下角开始绘制,因此上下会颠倒。
CGSize imageSize = CGSizeMake(97, 97);
CGRect rect = { CGPointZero, imageSize };
UIImage *image = [UIImage imageNamed:@"NotificationAlert"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];
UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, rect, image.CGImage);
UIImage *drawImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image = drawImage;
[self.view addSubview:imageView];
reverse.png
正确的做法是在绘制前,变换坐标系,使其变为我们使用的frame的坐标系。
CGContextTranslateCTM(context, 0, imageSize.height);// 上移坐标系
CGContextScaleCTM(context, 1.0, -1.0);// 反转Y轴
normal.png
网友评论