3

我一直在网上寻找解决方案很长时间。大多数教程都非常简单地向 UIView 添加阴影。我还注意到,如果我们向 UIImageView 添加阴影。如果图像本身具有 alpha 通道,则阴影形状可以完美地适合内容图像的形状。例如,如果图像是具有透明背景的动物,则阴影形状也与该动物相同(不是与 UIImageView 框架相同的矩形阴影)。

但这些还不够。我需要做的是对阴影添加一些更改,使其可能具有一些旋转角度和压缩(挤压或移位)效果,以便看起来阳光来自某个点。

为了演示我需要什么,我上传了下面 2 张图片,这些图片是从 Apple 创建的 Google Map App 中捕获的。你可以想象 Annotation Pin 是一个有 Pin 形状的图像,所以阴影也是“pin 形”的,但它不是简单地用 CGSize“偏移”,你可以看到阴影的顶部向右移动了大约 35度并略微挤压高度。

当我们点击并按住并固定时,阴影也被动画远离针脚,所以我相信这样的阴影可以可编程地制作。

到目前为止我能找到的最好的阴影教程是http://nachbaur.com/blog/fun-shadow-effects-using-custom-calayer-shadowpaths但不幸的是,这不能产生这种效果。

如果有人知道答案或知道要搜索的更好的词,请告诉我。谢谢你。

(请注意,图像的形状在 App 中是动态的,因此不能使用 Photoshop 等任何工具预渲染阴影。)

注释针阴影

点击和放下时的注释针阴影

4

3 回答 3

2

为了创建这样的动态效果,您必须使用 Core Graphics。一旦你知道如何使用它,它就会非常强大。基本上你需要在上下文上设置一个倾斜变换,设置一个阴影并绘制图像。您可能还必须使用透明层。

于 2012-05-05T05:05:41.317 回答
1

听起来您不能使用 CALayer 阴影,因为那是为了解决特定的用例。Apple 在地图上使用大头标记的方法是提前创建两个单独的图像(例如在 Photoshop 中),然后将它们相对于参考点定位在地图内。

如果您确实需要在运行时执行此操作,则应该仍然可以使用 Core Graphics 或 ImageKit。要获得模糊的阴影外观,您可以使用 kCICategoryBlur CIFilter。然后,您可以将图像转换为灰度。要获得压缩的外观,您只需要调整图像大小和倾斜图像。

一旦你有两个独立的图像,你可以为阴影图像获取 CGImageRef 并将其设置为另一个子层的内容,或者你可以将它添加为一个单独的视图。

于 2012-05-08T15:37:47.910 回答
0

如果你知道所有的形状是什么,你可以在 Photoshop 中渲染一个阴影图像或其他东西。

于 2012-05-04T17:22:27.250 回答