From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001 From: 单军华 Date: Wed, 11 Jul 2018 10:47:42 +0800 Subject: [PATCH] 首次上传 --- screendisplay/Pods/YYText/YYText/YYLabel.h | 380 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 380 insertions(+), 0 deletions(-) diff --git a/screendisplay/Pods/YYText/YYText/YYLabel.h b/screendisplay/Pods/YYText/YYText/YYLabel.h new file mode 100755 index 0000000..a3687f1 --- /dev/null +++ b/screendisplay/Pods/YYText/YYText/YYLabel.h @@ -0,0 +1,380 @@ +// +// YYLabel.h +// YYText <https://github.com/ibireme/YYText> +// +// Created by ibireme on 15/2/25. +// Copyright (c) 2015 ibireme. +// +// This source code is licensed under the MIT-style license found in the +// LICENSE file in the root directory of this source tree. +// + +#import <UIKit/UIKit.h> + +#if __has_include(<YYText/YYText.h>) +#import <YYText/YYTextParser.h> +#import <YYText/YYTextLayout.h> +#import <YYText/YYTextAttribute.h> +#else +#import "YYTextParser.h" +#import "YYTextLayout.h" +#import "YYTextAttribute.h" +#endif + +NS_ASSUME_NONNULL_BEGIN + +#if !TARGET_INTERFACE_BUILDER + +/** + The YYLabel class implements a read-only text view. + + @discussion The API and behavior is similar to UILabel, but provides more features: + + * It supports asynchronous layout and rendering (to avoid blocking UI thread). + * It extends the CoreText attributes to support more text effects. + * It allows to add UIImage, UIView and CALayer as text attachments. + * It allows to add 'highlight' link to some range of text to allow user interact with. + * It allows to add container path and exclusion paths to control text container's shape. + * It supports vertical form layout to display CJK text. + + See NSAttributedString+YYText.h for more convenience methods to set the attributes. + See YYTextAttribute.h and YYTextLayout.h for more information. + */ +@interface YYLabel : UIView <NSCoding> + +#pragma mark - Accessing the Text Attributes +///============================================================================= +/// @name Accessing the Text Attributes +///============================================================================= + +/** + The text displayed by the label. Default is nil. + Set a new value to this property also replaces the text in `attributedText`. + Get the value returns the plain text in `attributedText`. + */ +@property (nullable, nonatomic, copy) NSString *text; + +/** + The font of the text. Default is 17-point system font. + Set a new value to this property also causes the new font to be applied to the entire `attributedText`. + Get the value returns the font at the head of `attributedText`. + */ +@property (null_resettable, nonatomic, strong) UIFont *font; + +/** + The color of the text. Default is black. + Set a new value to this property also causes the new color to be applied to the entire `attributedText`. + Get the value returns the color at the head of `attributedText`. + */ +@property (null_resettable, nonatomic, strong) UIColor *textColor; + +/** + The shadow color of the text. Default is nil. + Set a new value to this property also causes the shadow color to be applied to the entire `attributedText`. + Get the value returns the shadow color at the head of `attributedText`. + */ +@property (nullable, nonatomic, strong) UIColor *shadowColor; + +/** + The shadow offset of the text. Default is CGSizeZero. + Set a new value to this property also causes the shadow offset to be applied to the entire `attributedText`. + Get the value returns the shadow offset at the head of `attributedText`. + */ +@property (nonatomic) CGSize shadowOffset; + +/** + The shadow blur of the text. Default is 0. + Set a new value to this property also causes the shadow blur to be applied to the entire `attributedText`. + Get the value returns the shadow blur at the head of `attributedText`. + */ +@property (nonatomic) CGFloat shadowBlurRadius; + +/** + The technique to use for aligning the text. Default is NSTextAlignmentNatural. + Set a new value to this property also causes the new alignment to be applied to the entire `attributedText`. + Get the value returns the alignment at the head of `attributedText`. + */ +@property (nonatomic) NSTextAlignment textAlignment; + +/** + The text vertical aligmnent in container. Default is YYTextVerticalAlignmentCenter. + */ +@property (nonatomic) YYTextVerticalAlignment textVerticalAlignment; + +/** + The styled text displayed by the label. + Set a new value to this property also replaces the value of the `text`, `font`, `textColor`, + `textAlignment` and other properties in label. + + @discussion It only support the attributes declared in CoreText and YYTextAttribute. + See `NSAttributedString+YYText` for more convenience methods to set the attributes. + */ +@property (nullable, nonatomic, copy) NSAttributedString *attributedText; + +/** + The technique to use for wrapping and truncating the label's text. + Default is NSLineBreakByTruncatingTail. + */ +@property (nonatomic) NSLineBreakMode lineBreakMode; + +/** + The truncation token string used when text is truncated. Default is nil. + When the value is nil, the label use "���" as default truncation token. + */ +@property (nullable, nonatomic, copy) NSAttributedString *truncationToken; + +/** + The maximum number of lines to use for rendering text. Default value is 1. + 0 means no limit. + */ +@property (nonatomic) NSUInteger numberOfLines; + +/** + When `text` or `attributedText` is changed, the parser will be called to modify the text. + It can be used to add code highlighting or emoticon replacement to text view. + The default value is nil. + + See `YYTextParser` protocol for more information. + */ +@property (nullable, nonatomic, strong) id<YYTextParser> textParser; + +/** + The current text layout in text view. It can be used to query the text layout information. + Set a new value to this property also replaces most properties in this label, such as `text`, + `color`, `attributedText`, `lineBreakMode`, `textContainerPath`, `exclusionPaths` and so on. + */ +@property (nullable, nonatomic, strong) YYTextLayout *textLayout; + + +#pragma mark - Configuring the Text Container +///============================================================================= +/// @name Configuring the Text Container +///============================================================================= + +/** + A UIBezierPath object that specifies the shape of the text frame. Default value is nil. + */ +@property (nullable, nonatomic, copy) UIBezierPath *textContainerPath; + +/** + An array of UIBezierPath objects representing the exclusion paths inside the + receiver's bounding rectangle. Default value is nil. + */ +@property (nullable, nonatomic, copy) NSArray<UIBezierPath *> *exclusionPaths; + +/** + The inset of the text container's layout area within the text view's content area. + Default value is UIEdgeInsetsZero. + */ +@property (nonatomic) UIEdgeInsets textContainerInset; + +/** + Whether the receiver's layout orientation is vertical form. Default is NO. + It may used to display CJK text. + */ +@property (nonatomic, getter=isVerticalForm) BOOL verticalForm; + +/** + The text line position modifier used to modify the lines' position in layout. + Default value is nil. + See `YYTextLinePositionModifier` protocol for more information. + */ +@property (nullable, nonatomic, copy) id<YYTextLinePositionModifier> linePositionModifier; + +/** + The debug option to display CoreText layout result. + The default value is [YYTextDebugOption sharedDebugOption]. + */ +@property (nullable, nonatomic, copy) YYTextDebugOption *debugOption; + + +#pragma mark - Getting the Layout Constraints +///============================================================================= +/// @name Getting the Layout Constraints +///============================================================================= + +/** + The preferred maximum width (in points) for a multiline label. + + @discussion This property affects the size of the label when layout constraints + are applied to it. During layout, if the text extends beyond the width + specified by this property, the additional text is flowed to one or more new + lines, thereby increasing the height of the label. If the text is vertical + form, this value will match to text height. + */ +@property (nonatomic) CGFloat preferredMaxLayoutWidth; + + +#pragma mark - Interacting with Text Data +///============================================================================= +/// @name Interacting with Text Data +///============================================================================= + +/** + When user tap the label, this action will be called (similar to tap gesture). + The default value is nil. + */ +@property (nullable, nonatomic, copy) YYTextAction textTapAction; + +/** + When user long press the label, this action will be called (similar to long press gesture). + The default value is nil. + */ +@property (nullable, nonatomic, copy) YYTextAction textLongPressAction; + +/** + When user tap the highlight range of text, this action will be called. + The default value is nil. + */ +@property (nullable, nonatomic, copy) YYTextAction highlightTapAction; + +/** + When user long press the highlight range of text, this action will be called. + The default value is nil. + */ +@property (nullable, nonatomic, copy) YYTextAction highlightLongPressAction; + + +#pragma mark - Configuring the Display Mode +///============================================================================= +/// @name Configuring the Display Mode +///============================================================================= + +/** + A Boolean value indicating whether the layout and rendering codes are running + asynchronously on background threads. + + The default value is `NO`. + */ +@property (nonatomic) BOOL displaysAsynchronously; + +/** + If the value is YES, and the layer is rendered asynchronously, then it will + set label.layer.contents to nil before display. + + The default value is `YES`. + + @discussion When the asynchronously display is enabled, the layer's content will + be updated after the background render process finished. If the render process + can not finished in a vsync time (1/60 second), the old content will be still kept + for display. You may manually clear the content by set the layer.contents to nil + after you update the label's properties, or you can just set this property to YES. + */ +@property (nonatomic) BOOL clearContentsBeforeAsynchronouslyDisplay; + +/** + If the value is YES, and the layer is rendered asynchronously, then it will add + a fade animation on layer when the contents of layer changed. + + The default value is `YES`. + */ +@property (nonatomic) BOOL fadeOnAsynchronouslyDisplay; + +/** + If the value is YES, then it will add a fade animation on layer when some range + of text become highlighted. + + The default value is `YES`. + */ +@property (nonatomic) BOOL fadeOnHighlight; + +/** + Ignore common properties (such as text, font, textColor, attributedText...) and + only use "textLayout" to display content. + + The default value is `NO`. + + @discussion If you control the label content only through "textLayout", then + you may set this value to YES for higher performance. + */ +@property (nonatomic) BOOL ignoreCommonProperties; + +/* + Tips: + + 1. If you only need a UILabel alternative to display rich text and receive link touch event, + you do not need to adjust the display mode properties. + + 2. If you have performance issues, you may enable the asynchronous display mode + by setting the `displaysAsynchronously` to YES. + + 3. If you want to get the highest performance, you should do text layout with + `YYTextLayout` class in background thread. Here's an example: + + YYLabel *label = [YYLabel new]; + label.displaysAsynchronously = YES; + label.ignoreCommonProperties = YES; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + // Create attributed string. + NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"Some Text"]; + text.yy_font = [UIFont systemFontOfSize:16]; + text.yy_color = [UIColor grayColor]; + [text yy_setColor:[UIColor redColor] range:NSMakeRange(0, 4)]; + + // Create text container + YYTextContainer *container = [YYTextContainer new]; + container.size = CGSizeMake(100, CGFLOAT_MAX); + container.maximumNumberOfRows = 0; + + // Generate a text layout. + YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:text]; + + dispatch_async(dispatch_get_main_queue(), ^{ + label.size = layout.textBoundingSize; + label.textLayout = layout; + }); + }); + + */ + +@end + + +#else // TARGET_INTERFACE_BUILDER +IB_DESIGNABLE +@interface YYLabel : UIView <NSCoding> +@property (nullable, nonatomic, copy) IBInspectable NSString *text; +@property (null_resettable, nonatomic, strong) IBInspectable UIColor *textColor; +@property (nullable, nonatomic, strong) IBInspectable NSString *fontName_; +@property (nonatomic) IBInspectable CGFloat fontSize_; +@property (nonatomic) IBInspectable BOOL fontIsBold_; +@property (nonatomic) IBInspectable NSUInteger numberOfLines; +@property (nonatomic) IBInspectable NSInteger lineBreakMode; +@property (nonatomic) IBInspectable CGFloat preferredMaxLayoutWidth; +@property (nonatomic, getter=isVerticalForm) IBInspectable BOOL verticalForm; +@property (nonatomic) IBInspectable NSInteger textAlignment; +@property (nonatomic) IBInspectable NSInteger textVerticalAlignment; +@property (nullable, nonatomic, strong) IBInspectable UIColor *shadowColor; +@property (nonatomic) IBInspectable CGPoint shadowOffset; +@property (nonatomic) IBInspectable CGFloat shadowBlurRadius; +@property (nullable, nonatomic, copy) IBInspectable NSAttributedString *attributedText; +@property (nonatomic) IBInspectable CGFloat insetTop_; +@property (nonatomic) IBInspectable CGFloat insetBottom_; +@property (nonatomic) IBInspectable CGFloat insetLeft_; +@property (nonatomic) IBInspectable CGFloat insetRight_; +@property (nonatomic) IBInspectable BOOL debugEnabled_; + +@property (null_resettable, nonatomic, strong) UIFont *font; +@property (nullable, nonatomic, copy) NSAttributedString *truncationToken; +@property (nullable, nonatomic, strong) id<YYTextParser> textParser; +@property (nullable, nonatomic, strong) YYTextLayout *textLayout; +@property (nullable, nonatomic, copy) UIBezierPath *textContainerPath; +@property (nullable, nonatomic, copy) NSArray<UIBezierPath*> *exclusionPaths; +@property (nonatomic) UIEdgeInsets textContainerInset; +@property (nullable, nonatomic, copy) id<YYTextLinePositionModifier> linePositionModifier; +@property (nonnull, nonatomic, copy) YYTextDebugOption *debugOption; +@property (nullable, nonatomic, copy) YYTextAction textTapAction; +@property (nullable, nonatomic, copy) YYTextAction textLongPressAction; +@property (nullable, nonatomic, copy) YYTextAction highlightTapAction; +@property (nullable, nonatomic, copy) YYTextAction highlightLongPressAction; +@property (nonatomic) BOOL displaysAsynchronously; +@property (nonatomic) BOOL clearContentsBeforeAsynchronouslyDisplay; +@property (nonatomic) BOOL fadeOnAsynchronouslyDisplay; +@property (nonatomic) BOOL fadeOnHighlight; +@property (nonatomic) BOOL ignoreCommonProperties; +@end +#endif // !TARGET_INTERFACE_BUILDER + +NS_ASSUME_NONNULL_END -- Gitblit v1.8.0