ios学习第六天(四)美丽的自定义View
来源:互联网 发布:ubuntu12.04安装mysql 编辑:程序博客网 时间:2024/06/05 09:59
先看效果,如果使用线程控制,树的颜色将会变化,使用的图片如果足够精致,效果将会更好。
图片中这棵树,不是背景图片,是自定义View+图片共同效果,借助上一篇的彩色效果,加上一颗树的图片即可完成,看代码吧,太晚了,不解释。
//// MyMagicalView.h// MyUIView//// Created by Moluth on 17/4/12.// Copyright (c) 2017年 Moluth. All rights reserved.//#import <UIKit/UIKit.h>@interface MyMagicalView : UIView{@public double tr,tg,tb;@public void* imageData;@public int width,height;}@end
//// MyMagicalView.m// MyUIView//// Created by Moluth on 17/4/12.// Copyright (c) 2017年 Moluth. All rights reserved.//#import "MyMagicalView.h"@implementation MyMagicalView- (id)initWithFrame : (CGRect)frame{ self = [super initWithFrame:frame]; UIImage *img=[UIImage imageNamed:@"tree.jpg"]; [self getImageData:img]; return self;}-(void)drawRect:(CGRect)rect{ // 获取图形绘制上下文 int xa=round(rect.origin.x); int xb=round(rect.origin.x+rect.size.width); int ya=round(rect.origin.y); int yb=round(rect.origin.y+rect.size.height); unsigned char* data=(unsigned char*)imageData; CGContextRef context = UIGraphicsGetCurrentContext(); double r,g,b; for(int x=xa;x<xb;x++){ for(int y=ya;y<yb;y++){ int c=data[((height-y)*width+x)*4+1]; if(c>235)continue; r=(sin(x*0.0017-y*0.0005+tr+34.1)+1.0)/2.0; g=(sin((xb-x)*0.0009+y*0.0015+tg)+1.0)/2.0; b=(sin(x*0.0047+(yb-y)*0.0001+tb)+1.0)/2.0; CGContextSetRGBFillColor (context, r, g, b, 1.0);//设置填充颜色 CGContextFillRect(context,CGRectMake(x, y, 1, 1)); } } }- (void)getImageData:(UIImage*)image{ width=image.size.width; height=image.size.height; if (imageData == NULL) imageData = malloc(4 * image.size.width * image.size.height); CGColorSpaceRef cref = CGColorSpaceCreateDeviceRGB(); CGContextRef gc = CGBitmapContextCreate(imageData, image.size.width,image.size.height, 8,image.size.width*4, cref,kCGImageAlphaPremultipliedFirst); CGColorSpaceRelease(cref); UIGraphicsPushContext(gc); [image drawAtPoint:CGPointMake(0.0f, 0.0f)]; UIGraphicsPopContext(); CGContextRelease(gc);}@end
///今天到此为止了,结束,bye
0 0
- ios学习第六天(四)美丽的自定义View
- Android 自定义View(四)IOS LoadingView
- ios学习第六天(一)自定义UIView上
- ios学习第六天(二)自定义UIView中
- ios学习第六天(三)自定义UIView下
- 学习iOS的第六天
- 自定义view---滚动的刻度尺(四)
- 自定义View(四)View的生命周期
- Android view 详解(四) 自定义view
- 自定义view的学习
- 自定义View的学习
- IOS学习之——xib的创建 自定义View
- IOS学习之—— xib的用法--自定义View
- Android 进阶学习:Android自定义View的实现方法,带你一步步深入了解View(四)
- Android 进阶学习:Android自定义View的实现方法,带你一步步深入了解View(四)
- Android自定义View的实现方法(四)
- 四种常用的标准自定义View方法(上)
- 四种常用的标准自定义View方法(下)
- 深入学习SSH框架(Spring MVC +Spring FrameWork +Hibernate +Spring Security)《四:Spring Framework配置篇》
- React Native与Android原生通信交互详情
- POJ
- 字符串反转方法(递归方式)
- GTM系列数学书籍免费下载~
- ios学习第六天(四)美丽的自定义View
- sdut_java_Eddy的难题
- SpringBoot 数据库的基本操作
- 文件的归档和传输
- dll已退出,代码为 5。请验证您是否有足够的权限来运行此命令。
- linux中的tty,控制台,虚拟终端,串口,console(控制台终端)详解和区别
- Java实现生产者--消费者问题
- git常用命令
- HDU&POJ训练记录3 二分图KM算法