捕捉屏幕截圖
CALayer實例使用Core Graphics的renderInContext方法可以將視圖繪製到圖像上下文中以便轉化爲其他UIImage實例
+(UIImage *) imageFromView: (UIView *)theView {
// draw a view's contents into an image context
UIGraphicsBeginImageContext(theView.frame.size);
[theView.layer renderInContext:context];
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
return theImage;
}
UIGraphicsBeginImageContext(CGSize size)創建一個基於位圖的上下文(context),並將其設置爲當前上下文函數功能與UIGraphicsBeginImageContextWithOptions相同,相當於該方法的opaque參數爲NO,scale因子爲1.0 而UIGraphicsEndImageContext()方法是移除棧頂的基於當前位圖的圖形上下文捕捉截取某個區域內屏幕圖像
-(UIImage *)imageFromView: (UIView *) theView atFrame:(CGRect)rect {
UIGraphicsBeginImageContext(theView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
UIRectClip(rect);
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//[self getImageAreaFromImage:theImage atFrame:rect]; }
從某圖片中截圖
UIImage *image = [[UIImage alloc] initWithData:data];
//大圖
CGRect imageRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
CGSize itemSize = CGSizeMake(w,h);
UIGraphicsBeginImageContext(itemSize);
UIImage *smallimage = UIGraphicsGetImageFromCurrentImageContext();
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 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 CGImage
CGImageRef theCGImage = CGBitmapContextCreateImage(context);
CFRelease(gradient);
CGContextRelease(context);
return theCGImage;
}
實現圓角圖片:
1. 普通方法
UIColor *color = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:0];
[myImage setBackgroundColor:color];
//設置背景透明
myImage.layer.masksToBounds = YES;
myImage.layer.cornerRadius = 5.0;
myImage.layer.borderWidth = 0.5;
myImage.layer.borderColor = [[UIColor grayColor] CGColor];
2. 或者調用方法繪製圓角
/** 返回圓形圖片 */
- (UIImage *)circleImage {
/** NO代表透明 */
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
/** 獲得上下文 */
CGContextRef ref = UIGraphicsGetCurrentContext();
/** 添加一個圓 */
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextAddEllipseInRect(ref, rect);
/** 裁剪 */
CGContextClip(ref);
/** 將圖片畫上去 */
[self drawInRect:rect];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
兩圖合成一圖
-(UIImage*)addImage:(UIImage *)image1 toImage:(UIImage*)image2 {
UIGraphicsBeginImageContext(image1.size);
[image1 drawInRect:CGRectMake(0,0,image1.size.width,image1.size.height)];
[image2 drawInRect:CGRectMake(0,0,image2.size.width,image2.size.height)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}