采取圈IOS的屏幕截图

我正在做一些UIButtons的截图,这些UIButtons是500宽度和500高度的圆圈。 由于屏幕截图只能以正方形forms显示,而且我不会在图像周围出现白色的angular落,所以我使用此代码:

UIGraphicsBeginImageContext(self.Button3.layer.bounds.size); [self.Button3.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage* image2 = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData* data = UIImagePNGRepresentation(image); [data writeToFile:BusinessCardPath atomically:YES]; 

这完美的作品,它给我一张只有没有白色的angular落圆的照片。 但它可以被放大,因为它会丢失像素,它不包括在UIButton上的所有元素,如UILabels,而不是UIButton的子视图。

如果我使用这个代码:

 CGSize imageSize = CGSizeMake(310, 310); UIGraphicsBeginImageContext(self.Button3.layer.bounds.size); CGContextRef context = UIGraphicsGetCurrentContext(); /*CGContextTranslateCTM(context, -5, -50);*/ // Iterate over every window from back to front for (UIWindow *window in [[UIApplication sharedApplication] windows]) { if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) { // -renderInContext: renders in the coordinate space of the layer, // so we must first apply the layer's geometry to the graphics context CGContextSaveGState(context); // Center the context around the window's anchor point CGContextTranslateCTM(context, [window center].x, [window center].y); // Apply the window's transform about the anchor point CGContextConcatCTM(context, [window transform]); // Offset by the portion of the bounds left of and above the anchor point CGContextTranslateCTM(context, -[window bounds].size.width * [[window layer] anchorPoint].x, -[window bounds].size.height * [[window layer] anchorPoint].y); // Render the layer hierarchy to the current context [[window layer] renderInContext:context]; // Restore the context CGContextRestoreGState(context); } } // Retrieve the screenshot image UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

…我得到相反的效果。 上面的元素包含在屏幕截图中,高分辨率,但图像周围的白色angular落在那里。

您可以使用CAShapeLayer遮罩图像的某些部分。 .path属性用于定义将要呈现的区域。

 UIImageView *myImageView = [UIImageView alloc] init]; myImageView.image = [UIImage imageNamed:@"anImage.gif"]; [myImageView setClipsToBounds:YES]; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:myImageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(48, 48)]; CAShapeLayer *maskLayer = [CAShapeLayer layer]; maskLayer.frame = myImageView.bounds; maskLayer.path = maskPath.CGPath; myImageView.layer.mask = maskLayer; 

这应该给你一个圆形图像。 你可能需要玩半径。