iPhone iOS如何创建像投影等图形效果?iOS内置哪些效果?

8

非常抱歉这里有一大堆问题。我越来越多地开始使用Quartz Graphics,并发现它具有有趣的效果,但我没有很多样本来看它们的实际效果。

 view.layer.shadowPath = [UIBezierPath bezierPathWithRect:view.bounds].CGPath;

这里有一个阴影属性:

view.layer.shadowColor = [UIColor grayColor].CGColor;
view.layer.shadowOffset = CGSizeMake(5, 5);
view.layer.shadowPath = [UIBezierPath bezierPathWithRect:view.bounds].CGPath;
view.layer.shadowRadius = 9;

我无法显示阴影。

边框:

 view.layer.borderWidth = 1;
   view.layer.borderColor=[[UIColor whiteColor] CGColor];
iOS内置有哪些其他效果? *是否有一个全面的演示项目可以展示iOS内置了哪些图形操作功能?*

如何进行透明度遮罩?

是否有一种方法可以添加内部阴影或内部发光效果? 是否有一种方法可以使iOS按钮看起来比实际更“凹陷”?

是否有一种方法可以做径向渐变? 是否有一种方法可以创建类似Adobe Illustrator的多光芒镜头效果? 是否有一种方法可以使用“亮化、溶解”或其他Photoshop效果混合层? 是否有一种方法可以动态调整图像的亮度?我知道如何进行色调转换。

如果您能提供任何其他提示,以便对CALayers应用什么样的图层效果,我将不胜感激。


3
我来回答你的第一个问题:你需要设置 view.layer.maskToBounds = NO; 来显示阴影。 - Lefteris
谢谢!我正在使用maskToBounds来显示圆角。这让我相信,圆角和阴影是不兼容的,除非我从两个视图创建我的视图并以某种方式操纵路径。 - Alex Stone
3个回答

12

太巧了!我刚刚在一个iOS游戏设计研讨会上做了一个关于CoreGraphics和CoreAnimation的演示,并且今天刚刚在Github上发布了一些文档。

如果你喜欢一些实际的例子,你可以在这里查看代码库: https://github.com/pkluz/PKCoreTechniques

其中包括以下几个例子:

  • 填充颜色

  • 渐变填充(线性和径向)

  • 简单路径

  • 贝塞尔曲线

  • 剪切(标准和奇偶)

  • 创建自定义按钮

  • 简单平移

  • 使用命中检测触发的平移

  • 一个非常原始的CoreAnimation中带有三维转换的'CoverFlow'。

还有更多内容;-)

希望你能找到你需要的内容,但从我看到的内容来看,它应该涵盖了你所请求的大部分内容。

注意:还有一份作为交互式教程的PDF文档。


这太棒了。这只是一个非常棒的例子!我看到愤怒的小鸟路径是硬编码的。你是手动输入的还是使用了某种代码生成工具?你知道是否可以从图形编辑器(如Adobe Illustrator)中获取此路径的点数吗? - Alex Stone

2

这里有一个非常好的教程,它对我很有帮助,也许对你也有帮助。


谢谢你提供如此精彩的代码示例,这正是我一直在寻找的! - Alex Stone
1
@Templar,你提供的链接现在已经过时了。 - Tirth
@iAmbitious 是的,看起来这个页面不再可用了。这里有一个类似缓存的版本,但是图片已经丢失了 :( - Templar

1
这是我使用CIImage实现径向渐变生成的代码。如果没有创建渐变,它会显示指定的图片。否则,它会显示一个径向渐变。
+(UIImage*)doRadialGradientFilter:(NSString*)baseImageName 
{

    CIFilter* controlsFilter  = [CIFilter filterWithName: @"CIRadialGradient" keysAndValues:
                   @"inputColor1", [CIColor colorWithRed:0.0 green:0.0
                                                    blue:0.0 alpha:0.0], @"inputColor0", [CIColor colorWithRed:0.0 green:0.0
                                                                                                          blue:0.5 alpha:0.5], @"inputRadius0", [NSNumber numberWithDouble:0.0], nil];


    CIImage *displayImage = controlsFilter.outputImage;
    UIImage *finalImage = [UIImage imageWithCIImage:displayImage];

    CIContext *context = [CIContext contextWithOptions:nil];
    if (displayImage == nil || finalImage == nil) {
        // We did not get output image. Let's display the original image itself.
        return  [UIImage imageNamed:baseImageName];
    }else {
        // We got output image. Display it.
        return  [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]];
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接