forked from TextureGroup/Texture
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRandomCoreGraphicsNode.m
More file actions
87 lines (70 loc) · 2.56 KB
/
Copy pathRandomCoreGraphicsNode.m
File metadata and controls
87 lines (70 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//
// RandomCoreGraphicsNode.m
// Texture
//
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
//
#import "RandomCoreGraphicsNode.h"
#import <AsyncDisplayKit/ASDisplayNode+Subclasses.h>
@implementation RandomCoreGraphicsNode {
ASTextNode *_indexPathTextNode;
}
+ (UIColor *)randomColor
{
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}
+ (void)drawRect:(CGRect)bounds withParameters:(id<NSObject>)parameters isCancelled:(NS_NOESCAPE asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing
{
CGFloat locations[3];
NSMutableArray *colors = [NSMutableArray arrayWithCapacity:3];
[colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]];
locations[0] = 0.0;
[colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]];
locations[1] = 1.0;
[colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]];
locations[2] = ( arc4random() % 256 / 256.0 );
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)colors, locations);
CGContextDrawLinearGradient(ctx, gradient, CGPointZero, CGPointMake(bounds.size.width, bounds.size.height), 0);
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
}
- (instancetype)initWithContent:(NSString *)content
{
if (!(self = [super init])) {
return nil;
}
_indexPathTextNode = [[ASTextNode alloc] init];
_indexPathTextNode.attributedText = [[NSAttributedString alloc] initWithString:content attributes:nil];
[self addSubnode:_indexPathTextNode];
return self;
}
- (void)layout
{
[super layout];
_indexPathTextNode.frame = self.bounds;
}
#if 0
- (void)fetchData
{
NSLog(@"fetchData - %@, %@", self, self.indexPath);
[super fetchData];
}
- (void)clearFetchedData
{
NSLog(@"clearFetchedData - %@, %@", self, self.indexPath);
[super clearFetchedData];
}
- (void)visibilityDidChange:(BOOL)isVisible
{
NSLog(@"visibilityDidChange:%d - %@, %@", isVisible, self, self.indexPath);
[super visibilityDidChange:isVisible];
}
#endif
@end