Graphics Reference
In-Depth Information
Listing 7.7
Using
presentationLayer
to Determine Current Layer Position
@interface
ViewController ()
@property
(
nonatomic
,
strong
)
CALayer
*colorLayer;
@end
@implementation
ViewController
- (
void
)viewDidLoad
{
[
super
viewDidLoad
];
//create a red layer
self
.colorLayer = [
CALayer
layer
];
self
.colorLayer.
frame
=
CGRectMake
(
0
,
0
,
100
,
100
);
self
.colorLayer.
position
=
CGPointMake
(
self
.
view
.
bounds
.
size
.
width
/
2
,
self
.
view
.
bounds
.
size
.
height
/
2
);
self
.colorLayer.
backgroundColor
= [
UIColor
redColor
].
CGColor
;
[
self
.
view
.
layer
addSublayer
:
self
.colorLayer];
}
- (
void
)touchesBegan:(
NSSet
*)touches withEvent:(
UIEvent
*)event
{
//get the touch point
CGPoint
point = [[touches
anyObject
]
locationInView
:
self
.
view
];
//check if we've tapped the moving layer
if
([
self
.colorLayer.
presentationLayer
hitTest
:point])
{
//randomize the layer background color
CGFloat
red =
arc4random
() / (
CGFloat
)
INT_MAX
;
CGFloat
green =
arc4random
() / (
CGFloat
)
INT_MAX
;
CGFloat
blue =
arc4random
() / (
CGFloat
)
INT_MAX
;
self
.colorLayer.
backgroundColor
= [
UIColor
colorWithRed
:red
green
:green
blue
:blue
alpha
:
1.0
].
CGColor
;
}
else
{
//otherwise (slowly) move the layer to new position
[
CATransaction
begin
];
[
CATransaction
setAnimationDuration
:
4.0
];
self
.colorLayer.
position
= point;