抓圖、倒影、圓角

來源:互聯網
上載者:User

捕捉螢幕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];}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.