ios界面特效:倒影
来源:互联网 发布:程序员的数学三部曲 编辑:程序博客网 时间:2024/06/05 10:23
///////////////////////////////////ImageHelper.h///////////////////////////////////////////////////#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>#import <QuartzCore/QuartzCore.h> @interface ImageHelper : NSObject + (void) addReflectionToView: (UIView *) theView;@end///////////////////////////////////ImageHelper.m/////////////////////////////////////////////////// #import "ImageHelper.h"@implementation ImageHelperconst CGFloat kReflectDistance = 10.0f; //定义倒影与实体的中间间隔 + (void) addReflectionToView: (UIView *) theView // 外部接口,倒影处理,从这里开始{ theView.clipsToBounds = NO; UIImageView *reflection = [[UIImageView alloc] initWithImage:[ImageHelper reflectionOfView:theView withPercent: 1]]; // 具体处理 CGRect frame = reflection.frame; frame.origin = CGPointMake(0.0f, theView.frame.size.height + kReflectDistance); reflection.frame = frame; [theView addSubview:reflection]; //将倒影‘贴’在现有视图下方 [reflection release];}//核心函数,cookbook版+ (UIImage *) reflectionOfView: (UIView *)theView withPercent: (CGFloat) percent // percent这个参数用于设置阴影显示多少{ // Retain the width but shrink the height CGSize size = CGSizeMake(theView.frame.size.width, theView.frame.size.height * percent); // 制作镜像 UIGraphicsBeginImageContext(size); CGContextRef context = UIGraphicsGetCurrentContext(); [theView.layer renderInContext:context]; UIImage *partialimg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // 添加灰蒙渐变效果 CGImageRef mask = [ImageHelper createGradientImage:size]; CGImageRef ref = CGImageCreateWithMask(partialimg.CGImage, mask); UIImage *theImage = [UIImage imageWithCGImage:ref]; CGImageRelease(ref); CGImageRelease(mask); return theImage;}//核心函数,xes改良版+ (UIImage *) reflectionOfView_2: (UIView *)theView withPercent: (CGFloat) percent{ // Retain the width but shrink the height CGSize size = CGSizeMake(theView.frame.size.width, theView.frame.size.height * percent); // 制作镜像 CGContextRef context = MyCreateBmpContext(size.width,size.height);/ CGFloat height_left= theView.bounds.size.height - size.height; CGContextTranslateCTM(context, 0, -height_left); [theView.layer renderInContext:context]; CGImageRef bmpContext = CGBitmapContextCreateImage(context); // 添加灰蒙渐变效果 CGImageRef mask = [ImageHelper createGradientImage:size]; CGImageRef ref = CGImageCreateWithMask(bmpContext , mask); UIImage *theImage = [UIImage imageWithCGImage:ref]; CGImageRelease(ref); CGImageRelease(mask); return theImage;}CGContextRef MyCreateBmpContext(int pixelsWide, int pixelsHigh){ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); // create the bitmap context CGContextRef bitmapContext = CGBitmapContextCreate (nil, pixelsWide, pixelsHigh, 8, 0, colorSpace, // this will give us an optimal BGRA format for the device: (kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst)); CGColorSpaceRelease(colorSpace); return bitmapContext;}+ (CGImageRef) createGradientImage: (CGSize)size //蒙化处理函数{ CGFloat colors[] = {0.0, 1.0, 1.0, 1.0}; // Create gradient in gray device color space CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef context = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, colorSpace, kCGImageAlphaNone); CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2); CGColorSpaceRelease(colorSpace); // Draw the linear gradient 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;}
在iphone上经常可以看到图标的倒影效果,看起来挺复杂的,不过网上有很多博客都把cookbook上的代码拷贝了上来,然而经过测试那段代码只能实现一个一模一样的镜像,但不是倒立对称的。
首先要说的是,cookbook我觉得是故意只给你看一部分的,书上看得到的是一段类方法的函数,其实真正要使用,需要自己做一个类,ImageHelper,然后比如要对myview倒影化处理,只需调用[ImageHelper reflectToview:myview]即可。
- ios界面特效:倒影
- JAXAFX:实现倒影特效
- Gally倒影等特效
- Flex倒影特效
- iOS MBProgressHUD 特效 加载界面
- 镜像倒影特效Gallery
- flash特效原理:倒影效果
- 倒影 特效 控件 View ReflectionLayout
- iOS 烟花撒花效果,图层渐变,图层倒影特效。CAEmitterLayer粒子发射器
- ios 实现图片倒影
- IOS 图片倒影实例
- iOS动画之倒影
- 界面特效
- android Gallery镜像倒影特效
- Android 镜像倒影特效Gallery
- 使用 2D 方法实现倒影特效
- android Gallery镜像倒影特效
- 图像处理算法之水面倒影特效
- BBED学习-知识体系
- Mac OS下Linphone SDK的编译环境搭建
- 算法导论12.2-7 证明使用后继函数进行中序遍历的时间复杂度为Θ(n)
- jQuery随机改变图片
- Observable与Observer (观察者模式)
- ios界面特效:倒影
- 简析指针与多维数组
- HDU 2601 An easy problem
- [转]Oracle11g 输入错误次数修改、用户解锁、密码过期
- 执行 rails server 报错 Could not find a JavaScript runtime 解决办法
- 「linux」struct list_head 应用
- QuartZ Cron表达式
- jQuery属性过滤器
- 也谈指针运算