gpt4 book ai didi

objective-c - 带渐变填充的 Delaunay 三角剖分?

转载 作者:行者123 更新时间:2023-12-04 04:53:35 26 4
gpt4 key购买 nike

我正在尝试重新创建类似这种形状的东西-
http://www.creativeapplications.net/wp-content/uploads/2010/09/horizon_02_1024x768.png - 在 iOS 上使用 UIKit 或 CoreGraphics。

图中的那个是用 openFrameworks 完成的,它确实在 iOS 上运行。但是,我想在不必使用 oF 的情况下构建相同的内容,因此我可以将其全部保留为原生。

我假设形状是通过 Delaunay 三角剖分创建的,我可以在 Objective-C 中完成。问题是用渐变填充形状而不是普通的 UIColor!

有没有办法在本地完成这样的事情在 iPad 上具有良好的性能,还是我应该只使用 openFrameworks 并将其作为层带入应用程序?

最佳答案

你问如何用渐变填充三角形?下面的代码就是这样做的。为了让它工作,你需要添加 QuartzCore 框架,并且

#import <QuartzCore/QuartzCore.h>

该代码创建一个三角形形状的形状图层,然后将其用作渐变图层的蒙版。希望这会有所帮助。
- (void)drawRect:(CGRect)rect
{
CGFloat w = self.bounds.size.width / 4;
CGFloat h = self.bounds.size.height / 4;
CGFloat x = w * 2;
CGFloat y = h;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,NULL, x, y);
CGPathAddLineToPoint(path, NULL, x+w, y+2*h);
CGPathAddLineToPoint(path, NULL, x-w, y+2*h);
CGPathCloseSubpath(path);


CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
[shapeLayer setPath:path];

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
gradientLayer.startPoint = CGPointMake(0.25, 1.0);
gradientLayer.endPoint = CGPointMake(0.75, 0.0);
UIColor *startColour = [UIColor redColor];
UIColor *endColour = [UIColor greenColor];
gradientLayer.colors = [NSArray arrayWithObjects:(id)[startColour CGColor], (id)[endColour CGColor], nil];

[gradientLayer setMask:shapeLayer];

[self.layer addSublayer:gradientLayer];

CGPathRelease(path);
}

关于objective-c - 带渐变填充的 Delaunay 三角剖分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17075960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com