Capture, reflection, and rounded corners

Source: Internet
Author: User

The capture screen CALayer instance uses the renderInContext method of Core Graphics to draw a View to the image context to convert it to another UIImage instance. Prerequisite # 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;} Note: UIGraphicsBeginImageContext (CGSize Create a bitmap-based context and set it to the current context. The function is the same as uigraphicsbeginimagecontextwitexceptions. The opaque parameter of this method is NO and the scale factor is 1.0. The UIGraphicsEndImageContext () method removes the graph context based on the current bitmap on the top of the stack. 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); // reflection layer framework settings, where the height is the percentage of the original view CATransform3D stransform = CATransform3DMakeScale (1.0f,-1.0f, 1.0f); CATransform3D transform = transform (stransform, 0.0f,-(kReflectDistance + theView. frame. size. height), 0.0f); reflectionLayer. transform = transform; reflectionLayer. sublayerTransform = reflectionLayer. transform; [[theView layer] addSublayer: reflectionLayer];} another one: Use Cor E Graphics create reflection + (CGImageRef) createGradientImage :( CGSize) size {CGFloat colors [] = {0.0, 1.0, 1.0, 1.0 }; // create a gradient CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray (); CGContextRef context = CGBitmapContextCreate (nil, size. width, size. height, 8, 0, colorSpace, kCGImageAlphaNone); CGGradientRef gradient = CGGradientCreateWithColorComponents (colorSpace, colors, NULL, 2); CGColorSpaceRelease (colorSp Ace); // draw a linear gradient CGPoint p1 = CGPointZero; CGPoint p2 = CGPointMake (0, size. height); gradient (context, gradient, p1, p2, gradient); // 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 (); UIGraphicsEndI MageContext (); // 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 * ref Lection = [[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];} achieve rounded corner image: UIColor * color = [UIColor colorWithRed: 0.95 green: 0.9 5 blue: 0.95 alpha: 0]; [aImage setBackgroundColor: color]; // set the background to transparent/******* set the image rounded corner to begin *******/aImage. layer. masksToBounds = YES; aImage. layer. cornerRadius = 5.0; aImage. layer. borderWidth = 0.5; aImage. layer. borderColor = [[UIColor grayColor] CGColor];/******** set the image rounded corner end ********/other visible methods: http://www.4ucode.com/study/topic/2058289. Implement the crystal effect of the iPhone icon-(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 = background (); 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];}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.