zoukankan      html  css  js  c++  java
  • 为视图添加倒影效果

    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};
    // 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;
    }
    // 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];
    }

  • 相关阅读:
    读书笔记_Effective_C++_条款十:令operator=返回一个reference to *this
    读书笔记_Effective_C++_条款九:绝不在构造和析构函数中调用virtual函数
    读书笔记_Effective_C++_条款七:为多态基类声明virtual析构函数
    读书笔记_Effective_C++_条款十二:复制对象时勿忘其每一个成分
    读书笔记_Effective_C++_条款八:别让异常逃离析构函数
    创建django project及app中的若干问题
    python一些小知识
    python小专题——JSON
    python小专题——optparse模块
    初窥JQuery(一)选择符 【转】
  • 原文地址:https://www.cnblogs.com/GnagWang/p/2182237.html
Copyright © 2011-2022 走看看