抓图、倒影、圆角
捕捉屏幕截图CALayer实例使用Core Graphics的renderInContext方法可以将视图绘制到图像上下文中以便转化为其他UIImage实例。前提先#import+ (UIImage *) imageFromView: (UIView *)theView {// draw a view's contents into an image contextUIGraphicsBeginImageContext(theView.frame.size);CGContextRef context = UIGraphicsGetCurrentContext();[theView.layer renderInContext:context];UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return theImage;}注:UIGraphicsBeginImageContext(CGSize size)创建一个基于位图的上下文(context),并将其设置为当前上下文。函数功能与UIGraphicsBeginImageContextWithOptions相同,相当于该方法的opaque参数为NO,scale因子为1.0。而UIGraphicsEndImageContext()方法是移除栈顶的基于当前位图的图形上下文。视图添加倒影效果const CGFloat kReflectPercent = -0.25f;const CGFloat kReflectOpacity = 0.3f;const CGFloat kReflectDistance = 10.0f;+ (void)addSimpleReflectionToView:(UIView *)theView{CALayer *reflectionLayer = [CALayer layer];reflectionLayer.contents = [theView layer].contents;reflectionLayer.opacity = kReflectOpacity;reflectionLayer.frame = CGRectMake(0.0f,0.0f,theView.frame.size.width,theView.frame.size.height*kReflectPercent); //倒影层框架设置,其中高度是原视图的百分比CATransform3D stransform = CATransform3DMakeScale(1.0f,-1.0f,1.0f);CATransform3D transform = CATransform3DTranslate(stransform,0.0f,-(kReflectDistance + theView.frame.size.height),0.0f);reflectionLayer.transform = transform;reflectionLayer.sublayerTransform = reflectionLayer.transform;[[theView layer] addSublayer:reflectionLayer];}另一:使用Core Graphics创建倒影+ (CGImageRef) createGradientImage:(CGSize)size{CGFloat colors[] = {0.0,1.0,1.0,1.0};//在灰色设备色彩上建立一渐变CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();CGContextRef context = CGBitmapContextCreate(nil,size.width,size.height,8,0,colorSpace,kCGImageAlphaNone);CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace,colors,NULL,2);CGColorSpaceRelease(colorSpace);//绘制线性渐变CGPoint p1 = CGPointZero;CGPoint p2 = CGPointMake(0,size.height);CGContextDrawLinearGradient(context,gradient,p1,p2,kCGGradientDrawsAfterEndLocation);//Return the CGImageCGImageRef theCGImage = CGBitmapContextCreateImage(context);CFRelease(gradient);CGContextRelease(context);return theCGImage;}//Create a shrunken frame for the reflection+ (UIImage *) reflectionOfView:(UIView *)theView WithPercent:(CGFloat) percent{//Retain the width but shrink the heightCGSize size = CGSizeMake(theView.frame.size.width, theView.frame.size.height * percent);//Shrink the ViewUIGraphicsBeginImageContext(size);CGContextRef context = UIGraphicsGetCurrentContext();[theView.layer renderInContext:context];UIImage *partialimg = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();//build the maskCGImageRef mask = [ImageHelper createGradientImage:size];CGImageRef ref = CGImageCreateWithMask(partialimg.CGImage,mask);UIImage *theImage = [UIImage imageWithCGImage:ref];CGImageRelease(ref);CGImageRelease(mask);return theImage;}const CGFloat kReflectDistance = 10.0f;+ (void) addReflectionToView: (UIView *)theView{theView.clipsToBounds = NO;UIImageView *reflection = [[UIImageView alloc] initWithImage:[ImageHelper reflectionOfView:theView withPercent:0.45f]];CGRect frame = reflection.frame;frame.origin = CGPointMake(0.0f, theView.frame.size.height + kReflectDistance);reflection.frame = frame;// add the reflection as a 易做图 subview[theView addSubView:reflection];[reflection release];}实现圆角图片:UIColor *color = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:0];[aImage setBackgroundColor:color]; //设置背景透明/******设置图片圆角begin*******/aImage.layer.masksToBounds = YES;aImage.layer.cornerRadius = 5.0;aImage.layer.borderWidth = 0.5;aImage.layer.borderColor = [[UIColor grayColor] CGColor];/******设置图片圆角end********/另有方法可见:http://www.4ucode.com/Study/Topic/2058289转载文章。实现iPhone图标的水晶立体效果- (void)viewDidLoad {[super viewDidLoad];UIGraphicsBeginImageContext(icon.bounds.size);CGContextRef ctx = UIGraphicsGetCurrentContext();const CGFloat components[4] = {0.0,0.4,0.0,1.0};CGContextSetFillColor(ctx, components);CGContextFillRect(ctx, CGRectMake(0, 0, icon.bounds.size.width, icon.bounds.size.height));UIImage *background = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();UIImage *image = [UIImage imageNamed:@"icon.png"];UIImage *mask = [UIImage imageNamed:@"IconBase.png"];UIImage *roundCorner = [UIImage imageNamed:@"round-corner.png"];icon.image = image;CALayer* subLayer = [[CALayer layer] retain];subLayer.frame = icon.bounds;subLayer.contents = (id)[background CGImage];CALayer* maskLayer = [[CALayer layer] retain];maskLayer.frame = icon.bounds;maskLayer.contents = (id)[mask CGImage];[subLayer setMask:maskLayer];[[icon layer] addSublayer:subLayer];CALayer* roundCornerLayer = [[CALayer layer] retain];roundCornerLayer.frame = icon.bounds;roundCornerLayer.contents = (id)[roundCorner CGImage];[[icon layer] setMask:round补充:移动开发 , IOS ,
上一个:提取UIColor的rgba
下一个:ios 时间戳 当前时间 相互转化
- 更多wap疑问解答:
- 新人求助QPainter
- 为什么程序都退出了还可以收到推送?如果大多设备都可以推送那运营商怎么办?
- qt 4.7 sqlserver2000 存储过程调用
- 关于ANDROID4.0.1编译问题!
- Android FrameBuffer读屏幕30秒后mmap失败
- 联通粗定位用java程序如何来请求和接受数据
- 为什么QT运行Android平台的程序时,mouseMoveEvent事件响应的间隔时间很长??????????
- android与PC蓝牙通讯
- 指定大小的label 内容可变,如果内容超出label的宽度,将未能显示的部分显示在另一个label上
- Android调试
- android如何通过wifi连接无线打印机
- 运行程序,release目录下产生一个乱码文件夹
- 分享个某机构最新安卓资料,自己验证了
- service启动不起来,掉不了service connection
- 求助:QT5.0 没有QPrinter吗