【问题标题】:Objective-C Core Animation or OpenGL Draw Shadow at AngleObjective-C 核心动画或 OpenGL 以角度绘制阴影
【发布时间】:2014-01-23 00:43:39
【问题描述】:

您好,我想知道是否有人曾在使用核心动画或 OpenGL 的图像视图上绘制阴影,使阴影呈一定角度并呈圆形羽化。这是一种模糊的描述,所以我附上了我想要实现的目标的图像。我曾尝试使用图层并尝试在核心动画中绘制线条,但似乎什么都没有。我正在考虑在 OpenGL 中使用纹理来执行此操作,这是否是正确的方法,如果是,我将如何使用渐变在纹理上创建圆形扩展?

让我知道是否有人做到了这一点以及你是如何做到的。

这是我想要做的图片:

【问题讨论】:

  • 有人会喜欢这个问题的赏金吗?
  • 我很确定你不能用 Core Animation 画出那样的 3D 阴影。我会说你的选择是 OpenGL 或试图用阴影图像伪造它
  • 谢谢大卫,我正在考虑用 OpenGL 试试
  • 你知道我在 OpenGL 中是如何做到这一点的,只是阴影部分吗?
  • 如果你对 OpenGL 有点熟悉,那么你可以看看this tutorial。如果您对 OpenGL 不满意,我会强烈建议您先看看其他替代方案,因为 OpenGL 非常先进。

标签: objective-c uiimageview core-animation shadow


【解决方案1】:

我已经试过了..可能对你有帮助

    viewMain = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
viewMain.backgroundColor = [UIColor redColor];
[self.view addSubview:viewMain];

[viewMain.layer setShadowOpacity:0.5];
[viewMain.layer setShadowRadius:5];

CGPoint startPoint = CGPointMake(10, 10), endPoint = CGPointMake(120, 120);
CGFloat angle = M_PI/3; // 60 degrees in radians
CGPoint v1 = CGPointMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
CGPoint v2 = CGPointMake(cosf(angle) * v1.x - sinf(angle) * v1.y,
                         sinf(angle) * v1.x + cosf(angle) * v1.y);
CGPoint thirdPoint = CGPointMake(startPoint.x + v2.x, startPoint.y + v2.y);

UIBezierPath *triangle = [UIBezierPath bezierPath];
[triangle moveToPoint:startPoint];
[triangle addLineToPoint:endPoint];
[triangle addLineToPoint:thirdPoint];
[triangle closePath];
// ...

[viewMain.layer setShadowPath:triangle.CGPath];

你可以修改 UIBezierPath 为不同的角度。

【讨论】:

  • 非常感谢您的回答,我正在测试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多