赞
踩
- CGFloat scale = 1.0;
- if([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {
- CGFloat tmp = [[UIScreen mainScreen]scale];
- if (tmp > 1.5) {
- scale = 2.0;
- }
- }
-
- if(scale > 1.5) {
- UIGraphicsBeginImageContextWithOptions(_launcherView.frame.size, NO, scale);
- } else {
- UIGraphicsBeginImageContext(_launcherView.frame.size);
- }
-
- [_launcherView.layer renderInContext:UIGraphicsGetCurrentContext()];
-
- UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- CGRect upRect = CGRectMake(0, 0, _launcherView.frame.size.width*scale, (diff - offset)*scale);
- CGImageRef imageRefUp = CGImageCreateWithImageInRect([screenshot CGImage], upRect);
- [self.screenshot1 setFrame:CGRectMake(0, 0, screenshot1.frame.size.width, diff - offset)];
- [screenshot1 setContentMode:UIViewContentModeTop];
- UIImage * img1 = [UIImage imageWithCGImage:imageRefUp];
- [self.screenshot1 setBackgroundImage:img1 forState:UIControlStateNormal];
- CGImageRelease(imageRefUp);
-
- CGRect downRect = CGRectMake(0, (diff - offset)*scale, _launcherView.frame.size.width*scale, (screenshot.size.height - diff + offset)*scale);
- CGImageRef imageRefDown = CGImageCreateWithImageInRect([screenshot CGImage], downRect);
- [self.screenshot2 setFrame:CGRectMake(0, screenshot1.frame.size.height , screenshot2.frame.size.width, _launcherView.frame.size.height - screenshot1.frame.size.height)];
- [screenshot2 setContentMode:UIViewContentModeTop];
- UIImage * img2 = [UIImage imageWithCGImage:imageRefDown];
- [self.screenshot2 setBackgroundImage:img2 forState:UIControlStateNormal];
- CGImageRelease(imageRefDown);
I've written this code to perform exactly the same thing described in the other post. It works on any iOS device with at least iOS 3.1.
_launcherView is the view that need to be photographed
转帖:http://stackoverflow.com/questions/5146008/how-to-use-uigraphicsbeginimagecontextwithoptionsCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。