forked from facebookarchive/AsyncDisplayKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathASImageNode.h
More file actions
118 lines (104 loc) · 4 KB
/
ASImageNode.h
File metadata and controls
118 lines (104 loc) · 4 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <AsyncDisplayKit/ASControlNode.h>
/**
* Image tints.
*/
typedef NS_ENUM(NSUInteger, ASImageNodeTint) {
/**
* No tint.
*/
ASImageNodeTintNormal = 0,
/**
* Display the image in greyscale.
*/
ASImageNodeTintGreyscale,
};
/**
* Image modification block. Use to transform an image before display.
*
* @param image The image to be displayed.
*/
typedef UIImage *(^asimagenode_modification_block_t)(UIImage *image);
/**
* @abstract Draws images.
* @discussion Supports cropping, tinting, and arbitrary image modification blocks.
*/
@interface ASImageNode : ASControlNode
/**
* @abstract The image to display.
*
* @discussion The node will efficiently display stretchable images by using
* the layer's contentsCenter property. Non-stretchable images work too, of
* course.
*/
@property (atomic, retain) UIImage *image;
/**
* @abstract Simple way to tint the image.
*/
@property (nonatomic, assign) ASImageNodeTint tint;
#pragma mark - Cropping
/**
* @abstract Indicates whether efficient cropping of the receiver is enabled.
*
* @discussion Defaults to YES. See -setCropEnabled:recropImmediately:inBounds: for more
* information.
*/
@property (nonatomic, assign, getter=isCropEnabled) BOOL cropEnabled;
/**
* @abstract Enables or disables efficient cropping.
*
* @param cropEnabled YES to efficiently crop the receiver's contents such that
* contents outside of its bounds are not included; NO otherwise.
*
* @param recropImmediately If the receiver has an image, YES to redisplay the
* receiver immediately; NO otherwise.
*
* @param cropBounds The bounds into which the receiver will be cropped. Useful
* if bounds are to change in response to cropping (but have not yet done so).
*
* @discussion Efficient cropping is only performed when the receiver's view's
* contentMode is UIViewContentModeScaleAspectFill. By default, cropping is
* enabled. The crop alignment may be controlled via cropAlignmentFactor.
*/
- (void)setCropEnabled:(BOOL)cropEnabled recropImmediately:(BOOL)recropImmediately inBounds:(CGRect)cropBounds;
/**
* @abstract A value that controls how the receiver's efficient cropping is aligned.
*
* @discussion This value defines a rectangle that is to be featured by the
* receiver. The rectangle is specified as a "unit rectangle," using
* percentages of the source image's width and height, e.g. CGRectMake(0.5, 0,
* 0.5, 1.0) will feature the full right half a photo. If the cropRect is
* empty, the content mode of the receiver will be used to determine its
* dimensions, and only the cropRect's origin will be used for positioning. The
* default value of this property is CGRectMake(0.5, 0.5, 0.0, 0.0).
*/
@property (nonatomic, readwrite, assign) CGRect cropRect;
/**
* @abstract An optional block which can perform drawing operations on image
* during the display phase.
*
* @discussion Can be used to add image effects (such as rounding, adding
* borders, or other pattern overlays) without extraneous display calls.
*/
@property (nonatomic, readwrite, copy) asimagenode_modification_block_t imageModificationBlock;
#pragma mark -
/**
* @abstract Marks the receiver as needing display and performs a block after
* display has finished.
*
* @param displayCompletionBlock The block to be performed after display has
* finished. Its `canceled` property will be YES if display was prevented or
* canceled (via preventOrCancelDisplay); NO otherwise.
*
* @discussion displayCompletionBlock will be performed on the main-thread. If
* `preventOrCancelDisplay` is YES, `displayCompletionBlock` is will be
* performed immediately and `YES` will be passed for `canceled`.
*/
- (void)setNeedsDisplayWithCompletion:(void (^)(BOOL canceled))displayCompletionBlock;
@end