-
Notifications
You must be signed in to change notification settings - Fork 65
/
BTSAnchorPointLayer.m
69 lines (55 loc) · 2.06 KB
/
BTSAnchorPointLayer.m
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
//
// BTSAnchorPointLayer.m
// CoreAnimationFunHouse
//
// Created by Brian Coyner on 10/13/11.
// Copyright (c) 2011 Brian Coyner. All rights reserved.
//
#import "BTSAnchorPointLayer.h"
// A layer that draws a simple circle with a narrow border. This is useful
// for displaying the super layer's anchor point (for debugging purposes).
//
// Example usage:
// BTSAnchorPointLayer *anchorPointLayer = [[BTSAnchorPointLayer alloc] init];
// [anchorPointLayer setPosition:BTSCalculateAnchorPointPositionForLayer(yourSuperLayer)];
//
// . . .
//
// [yourSuperLayer addSublayer:anchorPointLayer];
//
// This layer's position does _not_ track the super layer's position. You need to adjust
// this layer's position anytime the super layer's position changes.
@implementation BTSAnchorPointLayer
- (id)init
{
self = [super init];
if (self) {
[self setBounds:CGRectMake(0.0, 0.0, 20.0, 20.0)];
[self setContentsScale:[[UIScreen mainScreen] scale]];
[self setNeedsDisplay];
}
return self;
}
- (void)drawInContext:(CGContextRef)context
{
CGRect bounds = [self bounds];
CGPoint center = {CGRectGetMidX(bounds), CGRectGetMidY(bounds)};
CGFloat strokeWidth = 2.0;
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, center.x, center.y, bounds.size.width / 2 - strokeWidth, 0.0, (CGFloat) (M_PI * 2.0), 0);
CGContextAddPath(context, path);
CGContextSetFillColorWithColor(context, [[UIColor redColor] colorWithAlphaComponent:0.5].CGColor);
CGContextFillPath(context);
CGContextAddPath(context, path);
CGContextSetLineWidth(context, strokeWidth);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextStrokePath(context);
CFRelease(path);
}
CGPoint BTSCalculateAnchorPointPositionForLayer(CALayer *superLayer)
{
CGRect superLayerBounds = [superLayer bounds];
CGPoint anchorPoint = [superLayer anchorPoint];
return CGPointMake(superLayerBounds.size.width * anchorPoint.x, superLayerBounds.size.height * anchorPoint.y);
}
@end