?
捕捉屏幕截圖
CALayer實例使用Core Graphics的renderInContext方法可以將視圖繪制到圖像上下文中以便轉化為其他UIImage實例。前提先#import <QuartzCore/QuartzCore.h>
+ (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()方法是移除棧頂的基于當前位圖的圖形上下文。
捕捉截取某個區域內屏幕圖像
- (UIImage *)imageFromView: (UIView *) theView atFrame:(CGRect)rect
{
UIGraphicsBeginImageContext(theView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
UIRectClip(rect);
[theView.layer renderInContext:context];
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return
theImage;
//
[self getImageAreaFromImage:theImage atFrame:rect];
}
從某圖片中截圖
UIImage *image = [[UIImage alloc] initWithData:data];
//
大圖
CGRect imageRect = CGRectMake(
0.0
,
0.0
, image.size.width, image.size.height);
CGSize itemSize = CGSizeMake(w,h);
UIGraphicsBeginImageContext(itemSize);
[image drawInRect:imageRect];
UIImage *smallimage = UIGraphicsGetImageFromCurrentImageContext();
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];
}
兩圖合成一圖
- (UIImage*)addImage:(UIImage *)image1 toImage:(UIImage*)image2
{
UIGraphicsBeginImageContext(image1.size);
[image1 drawInRect:CGRectMake(
0
,
0
,image1.size.width,image1.size.height)];
[image2 drawInRect:CGRectMake(
0
,
0
,image2.size.width,image2.size.height)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return
resultingImage;
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

