你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 抓圖、倒影、圓角

抓圖、倒影、圓角

編輯:IOS開發綜合
捕捉屏幕截圖 CALayer實例使用Core Graphics的renderInContext方法可以將視圖繪制到圖像上下文中以便轉化為其他UIImage實例。前提先#import + (UIImage *) imageFromView: (UIView *)theView {     // draw a view's contents into an image context    UIGraphicsBeginImageContext(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 CGImage       CGImageRef 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 height      CGSize size = CGSizeMake(theView.frame.size.width, theView.frame.size.height * percent);        //Shrink the View      UIGraphicsBeginImageContext(size);      CGContextRef context = UIGraphicsGetCurrentContext();      [theView.layer renderInContext:context];      UIImage *partialimg = UIGraphicsGetImageFromCurrentImageContext();      UIGraphicsEndImageContext();        //build the mask      CGImageRef 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 simple 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:roundCornerLayer];     [maskLayer release];     [subLayer release];     [roundCornerLayer release]; }
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved