Browse Source

version 0.9.0

ibireme 9 years ago
parent
commit
f33e1b10ea
100 changed files with 1310 additions and 0 deletions
  1. 7 0
      .travis.yml
  2. BIN
      Attributes/CoreText and TextKit Attributes.pdf
  3. BIN
      Attributes/CoreText and TextKit/Attachment.png
  4. BIN
      Attributes/CoreText and TextKit/BackgroundColor.png
  5. BIN
      Attributes/CoreText and TextKit/Baseline.png
  6. BIN
      Attributes/CoreText and TextKit/Color.png
  7. BIN
      Attributes/CoreText and TextKit/Effect.png
  8. BIN
      Attributes/CoreText and TextKit/Expansion.png
  9. BIN
      Attributes/CoreText and TextKit/Font.png
  10. BIN
      Attributes/CoreText and TextKit/Kern.png
  11. BIN
      Attributes/CoreText and TextKit/Ligature.png
  12. BIN
      Attributes/CoreText and TextKit/Link.png
  13. BIN
      Attributes/CoreText and TextKit/Obliqueness.png
  14. BIN
      Attributes/CoreText and TextKit/Paragraph/Alignment.png
  15. BIN
      Attributes/CoreText and TextKit/Paragraph/BaseWritingDirection.png
  16. BIN
      Attributes/CoreText and TextKit/Paragraph/FirstLineHeadIndent.png
  17. BIN
      Attributes/CoreText and TextKit/Paragraph/HeadIndent.png
  18. BIN
      Attributes/CoreText and TextKit/Paragraph/HyphenationFactor.png
  19. BIN
      Attributes/CoreText and TextKit/Paragraph/LineBreakMode.png
  20. BIN
      Attributes/CoreText and TextKit/Paragraph/LineHeightMultiple.png
  21. BIN
      Attributes/CoreText and TextKit/Paragraph/LineSpacing.png
  22. BIN
      Attributes/CoreText and TextKit/Paragraph/MaximumLineHeight.png
  23. BIN
      Attributes/CoreText and TextKit/Paragraph/MinimumLineHeight.png
  24. BIN
      Attributes/CoreText and TextKit/Paragraph/ParagraphSpacing.png
  25. BIN
      Attributes/CoreText and TextKit/Paragraph/Tab.png
  26. BIN
      Attributes/CoreText and TextKit/Paragraph/TailIndent.png
  27. BIN
      Attributes/CoreText and TextKit/Ruby.png
  28. BIN
      Attributes/CoreText and TextKit/RunDelegate.png
  29. BIN
      Attributes/CoreText and TextKit/Shadow.png
  30. BIN
      Attributes/CoreText and TextKit/Strikethrough.png
  31. BIN
      Attributes/CoreText and TextKit/StrikethroughColor.png
  32. BIN
      Attributes/CoreText and TextKit/Stroke.png
  33. BIN
      Attributes/CoreText and TextKit/StrokeColor.png
  34. BIN
      Attributes/CoreText and TextKit/Superscript.png
  35. BIN
      Attributes/CoreText and TextKit/Underline.png
  36. BIN
      Attributes/CoreText and TextKit/UnderlineColor.png
  37. BIN
      Attributes/CoreText and TextKit/VerticalForms.png
  38. BIN
      Attributes/CoreText and TextKit/WriteDirection.png
  39. BIN
      Attributes/YYText Extended/YYTextAttachment.gif
  40. BIN
      Attributes/YYText Extended/YYTextBackedString.png
  41. BIN
      Attributes/YYText Extended/YYTextBackgroundBorder.png
  42. BIN
      Attributes/YYText Extended/YYTextBinding.gif
  43. BIN
      Attributes/YYText Extended/YYTextBlockBorder.png
  44. BIN
      Attributes/YYText Extended/YYTextBorder.png
  45. BIN
      Attributes/YYText Extended/YYTextHighlight.gif
  46. BIN
      Attributes/YYText Extended/YYTextShadow.png
  47. BIN
      Attributes/architecture.png
  48. BIN
      Demo/DemoSnapshot/text_markdown.gif
  49. BIN
      Demo/DemoSnapshot/text_paste.gif
  50. BIN
      Demo/DemoSnapshot/text_path.gif
  51. BIN
      Demo/DemoSnapshot/text_vertical.gif
  52. 741 0
      Demo/YYTextDemo.xcodeproj/project.pbxproj
  53. 7 0
      Demo/YYTextDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  54. 17 0
      Demo/YYTextDemo/AppDelegate.h
  55. 45 0
      Demo/YYTextDemo/AppDelegate.m
  56. 38 0
      Demo/YYTextDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
  57. 27 0
      Demo/YYTextDemo/Base.lproj/LaunchScreen.storyboard
  58. 27 0
      Demo/YYTextDemo/Base.lproj/Main.storyboard
  59. 88 0
      Demo/YYTextDemo/CALayer+YYAdd.h
  60. 313 0
      Demo/YYTextDemo/CALayer+YYAdd.m
  61. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.gif
  62. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.png
  63. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.gif
  64. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.png
  65. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.gif
  66. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.png
  67. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.gif
  68. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.png
  69. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.gif
  70. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.png
  71. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.gif
  72. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.png
  73. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.gif
  74. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.png
  75. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.gif
  76. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.png
  77. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.gif
  78. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.png
  79. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.gif
  80. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.png
  81. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.gif
  82. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.png
  83. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.gif
  84. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.png
  85. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.gif
  86. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.png
  87. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.gif
  88. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.png
  89. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.gif
  90. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.png
  91. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.gif
  92. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.png
  93. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.gif
  94. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.png
  95. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.gif
  96. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.png
  97. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.gif
  98. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.png
  99. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.gif
  100. BIN
      Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.png

+ 7 - 0
.travis.yml

@@ -0,0 +1,7 @@
+language: objective-c
+osx_image: xcode7
+xcode_project: Framework/YYText.xcodeproj
+xcode_scheme: YYText
+
+script:
+- xctool -project Framework/YYText.xcodeproj -scheme YYText build test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

BIN
Attributes/CoreText and TextKit Attributes.pdf


BIN
Attributes/CoreText and TextKit/Attachment.png


BIN
Attributes/CoreText and TextKit/BackgroundColor.png


BIN
Attributes/CoreText and TextKit/Baseline.png


BIN
Attributes/CoreText and TextKit/Color.png


BIN
Attributes/CoreText and TextKit/Effect.png


BIN
Attributes/CoreText and TextKit/Expansion.png


BIN
Attributes/CoreText and TextKit/Font.png


BIN
Attributes/CoreText and TextKit/Kern.png


BIN
Attributes/CoreText and TextKit/Ligature.png


BIN
Attributes/CoreText and TextKit/Link.png


BIN
Attributes/CoreText and TextKit/Obliqueness.png


BIN
Attributes/CoreText and TextKit/Paragraph/Alignment.png


BIN
Attributes/CoreText and TextKit/Paragraph/BaseWritingDirection.png


BIN
Attributes/CoreText and TextKit/Paragraph/FirstLineHeadIndent.png


BIN
Attributes/CoreText and TextKit/Paragraph/HeadIndent.png


BIN
Attributes/CoreText and TextKit/Paragraph/HyphenationFactor.png


BIN
Attributes/CoreText and TextKit/Paragraph/LineBreakMode.png


BIN
Attributes/CoreText and TextKit/Paragraph/LineHeightMultiple.png


BIN
Attributes/CoreText and TextKit/Paragraph/LineSpacing.png


BIN
Attributes/CoreText and TextKit/Paragraph/MaximumLineHeight.png


BIN
Attributes/CoreText and TextKit/Paragraph/MinimumLineHeight.png


BIN
Attributes/CoreText and TextKit/Paragraph/ParagraphSpacing.png


BIN
Attributes/CoreText and TextKit/Paragraph/Tab.png


BIN
Attributes/CoreText and TextKit/Paragraph/TailIndent.png


BIN
Attributes/CoreText and TextKit/Ruby.png


BIN
Attributes/CoreText and TextKit/RunDelegate.png


BIN
Attributes/CoreText and TextKit/Shadow.png


BIN
Attributes/CoreText and TextKit/Strikethrough.png


BIN
Attributes/CoreText and TextKit/StrikethroughColor.png


BIN
Attributes/CoreText and TextKit/Stroke.png


BIN
Attributes/CoreText and TextKit/StrokeColor.png


BIN
Attributes/CoreText and TextKit/Superscript.png


BIN
Attributes/CoreText and TextKit/Underline.png


BIN
Attributes/CoreText and TextKit/UnderlineColor.png


BIN
Attributes/CoreText and TextKit/VerticalForms.png


BIN
Attributes/CoreText and TextKit/WriteDirection.png


BIN
Attributes/YYText Extended/YYTextAttachment.gif


BIN
Attributes/YYText Extended/YYTextBackedString.png


BIN
Attributes/YYText Extended/YYTextBackgroundBorder.png


BIN
Attributes/YYText Extended/YYTextBinding.gif


BIN
Attributes/YYText Extended/YYTextBlockBorder.png


BIN
Attributes/YYText Extended/YYTextBorder.png


BIN
Attributes/YYText Extended/YYTextHighlight.gif


BIN
Attributes/YYText Extended/YYTextShadow.png


BIN
Attributes/architecture.png


BIN
Demo/DemoSnapshot/text_markdown.gif


BIN
Demo/DemoSnapshot/text_paste.gif


BIN
Demo/DemoSnapshot/text_path.gif


BIN
Demo/DemoSnapshot/text_vertical.gif


+ 741 - 0
Demo/YYTextDemo.xcodeproj/project.pbxproj

@@ -0,0 +1,741 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		ABDC31581BE9FB990012A159 /* YYTextContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31261BE9FB990012A159 /* YYTextContainerView.m */; };
+		ABDC31591BE9FB990012A159 /* YYTextDebugOption.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31281BE9FB990012A159 /* YYTextDebugOption.m */; };
+		ABDC315A1BE9FB990012A159 /* YYTextEffectWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC312A1BE9FB990012A159 /* YYTextEffectWindow.m */; };
+		ABDC315B1BE9FB990012A159 /* YYTextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC312C1BE9FB990012A159 /* YYTextInput.m */; };
+		ABDC315C1BE9FB990012A159 /* YYTextKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC312E1BE9FB990012A159 /* YYTextKeyboardManager.m */; };
+		ABDC315D1BE9FB990012A159 /* YYTextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31301BE9FB990012A159 /* YYTextLayout.m */; };
+		ABDC315E1BE9FB990012A159 /* YYTextLine.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31321BE9FB990012A159 /* YYTextLine.m */; };
+		ABDC315F1BE9FB990012A159 /* YYTextMagnifier.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31341BE9FB990012A159 /* YYTextMagnifier.m */; };
+		ABDC31601BE9FB990012A159 /* YYTextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31361BE9FB990012A159 /* YYTextSelectionView.m */; };
+		ABDC31611BE9FB990012A159 /* YYTextArchiver.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31391BE9FB990012A159 /* YYTextArchiver.m */; };
+		ABDC31621BE9FB990012A159 /* YYTextAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC313B1BE9FB990012A159 /* YYTextAttribute.m */; };
+		ABDC31631BE9FB990012A159 /* YYTextParser.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC313D1BE9FB990012A159 /* YYTextParser.m */; };
+		ABDC31641BE9FB990012A159 /* YYTextRubyAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC313F1BE9FB990012A159 /* YYTextRubyAnnotation.m */; };
+		ABDC31651BE9FB990012A159 /* YYTextRunDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31411BE9FB990012A159 /* YYTextRunDelegate.m */; };
+		ABDC31661BE9FB990012A159 /* NSAttributedString+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31441BE9FB990012A159 /* NSAttributedString+YYText.m */; };
+		ABDC31671BE9FB990012A159 /* NSParagraphStyle+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31461BE9FB990012A159 /* NSParagraphStyle+YYText.m */; };
+		ABDC31681BE9FB990012A159 /* UIPasteboard+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31481BE9FB990012A159 /* UIPasteboard+YYText.m */; };
+		ABDC31691BE9FB990012A159 /* UIView+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC314A1BE9FB990012A159 /* UIView+YYText.m */; };
+		ABDC316A1BE9FB990012A159 /* YYTextAsyncLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC314C1BE9FB990012A159 /* YYTextAsyncLayer.m */; };
+		ABDC316B1BE9FB990012A159 /* YYTextTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC314E1BE9FB990012A159 /* YYTextTransaction.m */; };
+		ABDC316C1BE9FB990012A159 /* YYTextUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31501BE9FB990012A159 /* YYTextUtilities.m */; };
+		ABDC316D1BE9FB990012A159 /* YYTextWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31521BE9FB990012A159 /* YYTextWeakProxy.m */; };
+		ABDC316E1BE9FB990012A159 /* YYLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31541BE9FB990012A159 /* YYLabel.m */; };
+		ABDC316F1BE9FB990012A159 /* YYTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31571BE9FB990012A159 /* YYTextView.m */; };
+		ABDC319A1BEA00AC0012A159 /* YYTextExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31831BEA00AC0012A159 /* YYTextExample.m */; };
+		ABDC319B1BEA00AC0012A159 /* YYTextAttributeExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31851BEA00AC0012A159 /* YYTextAttributeExample.m */; };
+		ABDC319C1BEA00AC0012A159 /* YYTextAttachmentExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31871BEA00AC0012A159 /* YYTextAttachmentExample.m */; };
+		ABDC319D1BEA00AC0012A159 /* YYTextEditExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31891BEA00AC0012A159 /* YYTextEditExample.m */; };
+		ABDC319E1BEA00AC0012A159 /* YYTextMarkdownExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC318B1BEA00AC0012A159 /* YYTextMarkdownExample.m */; };
+		ABDC319F1BEA00AC0012A159 /* YYTextEmoticonExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC318D1BEA00AC0012A159 /* YYTextEmoticonExample.m */; };
+		ABDC31A01BEA00AC0012A159 /* YYTextBindingExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC318F1BEA00AC0012A159 /* YYTextBindingExample.m */; };
+		ABDC31A11BEA00AC0012A159 /* YYTextCopyPasteExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31911BEA00AC0012A159 /* YYTextCopyPasteExample.m */; };
+		ABDC31A21BEA00AC0012A159 /* YYTextUndoRedoExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31931BEA00AC0012A159 /* YYTextUndoRedoExample.m */; };
+		ABDC31A31BEA00AC0012A159 /* YYTextRubyExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31951BEA00AC0012A159 /* YYTextRubyExample.m */; };
+		ABDC31A41BEA00AC0012A159 /* YYTextAsyncExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31971BEA00AC0012A159 /* YYTextAsyncExample.m */; };
+		ABDC31A51BEA00AC0012A159 /* YYTextExampleHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31991BEA00AC0012A159 /* YYTextExampleHelper.m */; };
+		ABDC31AC1BEA01080012A159 /* UIView+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31A71BEA01080012A159 /* UIView+YYAdd.m */; };
+		ABDC31AD1BEA01080012A159 /* UIControl+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31A91BEA01080012A159 /* UIControl+YYAdd.m */; };
+		ABDC31AE1BEA01080012A159 /* UIGestureRecognizer+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31AB1BEA01080012A159 /* UIGestureRecognizer+YYAdd.m */; };
+		ABDC31B11BEA01700012A159 /* UIImage+YYWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31B01BEA01700012A159 /* UIImage+YYWebImage.m */; };
+		ABDC31B41BEA02D50012A159 /* NSBundle+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31B31BEA02D50012A159 /* NSBundle+YYAdd.m */; };
+		ABDC31B71BEA02F90012A159 /* NSString+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31B61BEA02F90012A159 /* NSString+YYAdd.m */; };
+		ABDC31BA1BEA03B20012A159 /* YYGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31B91BEA03B20012A159 /* YYGestureRecognizer.m */; };
+		ABDC31BD1BEA03EF0012A159 /* YYFPSLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31BC1BEA03EF0012A159 /* YYFPSLabel.m */; };
+		ABDC31C01BEA05640012A159 /* CALayer+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31BF1BEA05640012A159 /* CALayer+YYAdd.m */; };
+		ABDC31C31BEA05990012A159 /* NSData+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31C21BEA05990012A159 /* NSData+YYAdd.m */; };
+		ABDC31C51BEA06070012A159 /* EmoticonQQ.bundle in Resources */ = {isa = PBXBuildFile; fileRef = ABDC31C41BEA06070012A159 /* EmoticonQQ.bundle */; };
+		ABDC31C81BEA06DB0012A159 /* YYWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31C71BEA06DB0012A159 /* YYWeakProxy.m */; };
+		ABDC31CA1BEA07160012A159 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = ABDC31C91BEA07160012A159 /* libz.tbd */; };
+		ABDC31CC1BEA071B0012A159 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABDC31CB1BEA071B0012A159 /* ImageIO.framework */; };
+		ABDC31CE1BEA07290012A159 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABDC31CD1BEA07290012A159 /* SystemConfiguration.framework */; };
+		ABDC31D21BEA083F0012A159 /* pia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABDC31D11BEA083F0012A159 /* pia@2x.png */; };
+		ABDC31D41BEA08840012A159 /* dribbble64_imageio.png in Resources */ = {isa = PBXBuildFile; fileRef = ABDC31D31BEA08840012A159 /* dribbble64_imageio.png */; };
+		ABDC31D61BEA09310012A159 /* dribbble256_imageio.png in Resources */ = {isa = PBXBuildFile; fileRef = ABDC31D51BEA09310012A159 /* dribbble256_imageio.png */; };
+		ABDC31E31BEA0C5A0012A159 /* Animated image support.txt in Resources */ = {isa = PBXBuildFile; fileRef = ABDC31D81BEA0C5A0012A159 /* Animated image support.txt */; };
+		ABDC31E41BEA0C5A0012A159 /* YYAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31DA1BEA0C5A0012A159 /* YYAnimatedImageView.m */; };
+		ABDC31E51BEA0C5A0012A159 /* YYFrameImage.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31DC1BEA0C5A0012A159 /* YYFrameImage.m */; };
+		ABDC31E61BEA0C5A0012A159 /* YYImage.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31DE1BEA0C5A0012A159 /* YYImage.m */; };
+		ABDC31E71BEA0C5A0012A159 /* YYImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31E01BEA0C5A0012A159 /* YYImageCoder.m */; };
+		ABDC31E81BEA0C5A0012A159 /* YYSpriteSheetImage.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC31E21BEA0C5A0012A159 /* YYSpriteSheetImage.m */; };
+		ABDC32101BEB35DB0012A159 /* YYTextTagExample.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC320F1BEB35DB0012A159 /* YYTextTagExample.m */; };
+		D975392B1BD2896100C6F4B8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D975392A1BD2896100C6F4B8 /* main.m */; };
+		D975392E1BD2896100C6F4B8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D975392D1BD2896100C6F4B8 /* AppDelegate.m */; };
+		D97539311BD2896100C6F4B8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D97539301BD2896100C6F4B8 /* ViewController.m */; };
+		D97539341BD2896100C6F4B8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D97539321BD2896100C6F4B8 /* Main.storyboard */; };
+		D97539361BD2896100C6F4B8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D97539351BD2896100C6F4B8 /* Assets.xcassets */; };
+		D97539391BD2896100C6F4B8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D97539371BD2896100C6F4B8 /* LaunchScreen.storyboard */; };
+		D975394B1BD289B400C6F4B8 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D975394A1BD289B400C6F4B8 /* MobileCoreServices.framework */; };
+		D975394D1BD289B800C6F4B8 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D975394C1BD289B800C6F4B8 /* Accelerate.framework */; };
+		D975394F1BD289BC00C6F4B8 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D975394E1BD289BC00C6F4B8 /* CoreText.framework */; };
+		D97539511BD289C000C6F4B8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D97539501BD289C000C6F4B8 /* QuartzCore.framework */; };
+		D97539531BD289C400C6F4B8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D97539521BD289C400C6F4B8 /* UIKit.framework */; };
+		D97539551BD289C800C6F4B8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D97539541BD289C800C6F4B8 /* CoreFoundation.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		D97539481BD2899B00C6F4B8 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		ABDC31251BE9FB990012A159 /* YYTextContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextContainerView.h; sourceTree = "<group>"; };
+		ABDC31261BE9FB990012A159 /* YYTextContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextContainerView.m; sourceTree = "<group>"; };
+		ABDC31271BE9FB990012A159 /* YYTextDebugOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextDebugOption.h; sourceTree = "<group>"; };
+		ABDC31281BE9FB990012A159 /* YYTextDebugOption.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextDebugOption.m; sourceTree = "<group>"; };
+		ABDC31291BE9FB990012A159 /* YYTextEffectWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextEffectWindow.h; sourceTree = "<group>"; };
+		ABDC312A1BE9FB990012A159 /* YYTextEffectWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextEffectWindow.m; sourceTree = "<group>"; };
+		ABDC312B1BE9FB990012A159 /* YYTextInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextInput.h; sourceTree = "<group>"; };
+		ABDC312C1BE9FB990012A159 /* YYTextInput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextInput.m; sourceTree = "<group>"; };
+		ABDC312D1BE9FB990012A159 /* YYTextKeyboardManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextKeyboardManager.h; sourceTree = "<group>"; };
+		ABDC312E1BE9FB990012A159 /* YYTextKeyboardManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextKeyboardManager.m; sourceTree = "<group>"; };
+		ABDC312F1BE9FB990012A159 /* YYTextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextLayout.h; sourceTree = "<group>"; };
+		ABDC31301BE9FB990012A159 /* YYTextLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextLayout.m; sourceTree = "<group>"; };
+		ABDC31311BE9FB990012A159 /* YYTextLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextLine.h; sourceTree = "<group>"; };
+		ABDC31321BE9FB990012A159 /* YYTextLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextLine.m; sourceTree = "<group>"; };
+		ABDC31331BE9FB990012A159 /* YYTextMagnifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextMagnifier.h; sourceTree = "<group>"; };
+		ABDC31341BE9FB990012A159 /* YYTextMagnifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextMagnifier.m; sourceTree = "<group>"; };
+		ABDC31351BE9FB990012A159 /* YYTextSelectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextSelectionView.h; sourceTree = "<group>"; };
+		ABDC31361BE9FB990012A159 /* YYTextSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextSelectionView.m; sourceTree = "<group>"; };
+		ABDC31381BE9FB990012A159 /* YYTextArchiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextArchiver.h; sourceTree = "<group>"; };
+		ABDC31391BE9FB990012A159 /* YYTextArchiver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextArchiver.m; sourceTree = "<group>"; };
+		ABDC313A1BE9FB990012A159 /* YYTextAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextAttribute.h; sourceTree = "<group>"; };
+		ABDC313B1BE9FB990012A159 /* YYTextAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextAttribute.m; sourceTree = "<group>"; };
+		ABDC313C1BE9FB990012A159 /* YYTextParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextParser.h; sourceTree = "<group>"; };
+		ABDC313D1BE9FB990012A159 /* YYTextParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextParser.m; sourceTree = "<group>"; };
+		ABDC313E1BE9FB990012A159 /* YYTextRubyAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextRubyAnnotation.h; sourceTree = "<group>"; };
+		ABDC313F1BE9FB990012A159 /* YYTextRubyAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextRubyAnnotation.m; sourceTree = "<group>"; };
+		ABDC31401BE9FB990012A159 /* YYTextRunDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextRunDelegate.h; sourceTree = "<group>"; };
+		ABDC31411BE9FB990012A159 /* YYTextRunDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextRunDelegate.m; sourceTree = "<group>"; };
+		ABDC31431BE9FB990012A159 /* NSAttributedString+YYText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+YYText.h"; sourceTree = "<group>"; };
+		ABDC31441BE9FB990012A159 /* NSAttributedString+YYText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+YYText.m"; sourceTree = "<group>"; };
+		ABDC31451BE9FB990012A159 /* NSParagraphStyle+YYText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSParagraphStyle+YYText.h"; sourceTree = "<group>"; };
+		ABDC31461BE9FB990012A159 /* NSParagraphStyle+YYText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSParagraphStyle+YYText.m"; sourceTree = "<group>"; };
+		ABDC31471BE9FB990012A159 /* UIPasteboard+YYText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIPasteboard+YYText.h"; sourceTree = "<group>"; };
+		ABDC31481BE9FB990012A159 /* UIPasteboard+YYText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIPasteboard+YYText.m"; sourceTree = "<group>"; };
+		ABDC31491BE9FB990012A159 /* UIView+YYText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+YYText.h"; sourceTree = "<group>"; };
+		ABDC314A1BE9FB990012A159 /* UIView+YYText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+YYText.m"; sourceTree = "<group>"; };
+		ABDC314B1BE9FB990012A159 /* YYTextAsyncLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextAsyncLayer.h; sourceTree = "<group>"; };
+		ABDC314C1BE9FB990012A159 /* YYTextAsyncLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextAsyncLayer.m; sourceTree = "<group>"; };
+		ABDC314D1BE9FB990012A159 /* YYTextTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextTransaction.h; sourceTree = "<group>"; };
+		ABDC314E1BE9FB990012A159 /* YYTextTransaction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextTransaction.m; sourceTree = "<group>"; };
+		ABDC314F1BE9FB990012A159 /* YYTextUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextUtilities.h; sourceTree = "<group>"; };
+		ABDC31501BE9FB990012A159 /* YYTextUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextUtilities.m; sourceTree = "<group>"; };
+		ABDC31511BE9FB990012A159 /* YYTextWeakProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextWeakProxy.h; sourceTree = "<group>"; };
+		ABDC31521BE9FB990012A159 /* YYTextWeakProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextWeakProxy.m; sourceTree = "<group>"; };
+		ABDC31531BE9FB990012A159 /* YYLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYLabel.h; sourceTree = "<group>"; };
+		ABDC31541BE9FB990012A159 /* YYLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYLabel.m; sourceTree = "<group>"; };
+		ABDC31551BE9FB990012A159 /* YYText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYText.h; sourceTree = "<group>"; };
+		ABDC31561BE9FB990012A159 /* YYTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextView.h; sourceTree = "<group>"; };
+		ABDC31571BE9FB990012A159 /* YYTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextView.m; sourceTree = "<group>"; };
+		ABDC31821BEA00AC0012A159 /* YYTextExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextExample.h; sourceTree = "<group>"; };
+		ABDC31831BEA00AC0012A159 /* YYTextExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextExample.m; sourceTree = "<group>"; };
+		ABDC31841BEA00AC0012A159 /* YYTextAttributeExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextAttributeExample.h; sourceTree = "<group>"; };
+		ABDC31851BEA00AC0012A159 /* YYTextAttributeExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextAttributeExample.m; sourceTree = "<group>"; };
+		ABDC31861BEA00AC0012A159 /* YYTextAttachmentExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextAttachmentExample.h; sourceTree = "<group>"; };
+		ABDC31871BEA00AC0012A159 /* YYTextAttachmentExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextAttachmentExample.m; sourceTree = "<group>"; };
+		ABDC31881BEA00AC0012A159 /* YYTextEditExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextEditExample.h; sourceTree = "<group>"; };
+		ABDC31891BEA00AC0012A159 /* YYTextEditExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextEditExample.m; sourceTree = "<group>"; };
+		ABDC318A1BEA00AC0012A159 /* YYTextMarkdownExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextMarkdownExample.h; sourceTree = "<group>"; };
+		ABDC318B1BEA00AC0012A159 /* YYTextMarkdownExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextMarkdownExample.m; sourceTree = "<group>"; };
+		ABDC318C1BEA00AC0012A159 /* YYTextEmoticonExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextEmoticonExample.h; sourceTree = "<group>"; };
+		ABDC318D1BEA00AC0012A159 /* YYTextEmoticonExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextEmoticonExample.m; sourceTree = "<group>"; };
+		ABDC318E1BEA00AC0012A159 /* YYTextBindingExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextBindingExample.h; sourceTree = "<group>"; };
+		ABDC318F1BEA00AC0012A159 /* YYTextBindingExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextBindingExample.m; sourceTree = "<group>"; };
+		ABDC31901BEA00AC0012A159 /* YYTextCopyPasteExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextCopyPasteExample.h; sourceTree = "<group>"; };
+		ABDC31911BEA00AC0012A159 /* YYTextCopyPasteExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextCopyPasteExample.m; sourceTree = "<group>"; };
+		ABDC31921BEA00AC0012A159 /* YYTextUndoRedoExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextUndoRedoExample.h; sourceTree = "<group>"; };
+		ABDC31931BEA00AC0012A159 /* YYTextUndoRedoExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextUndoRedoExample.m; sourceTree = "<group>"; };
+		ABDC31941BEA00AC0012A159 /* YYTextRubyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextRubyExample.h; sourceTree = "<group>"; };
+		ABDC31951BEA00AC0012A159 /* YYTextRubyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextRubyExample.m; sourceTree = "<group>"; };
+		ABDC31961BEA00AC0012A159 /* YYTextAsyncExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextAsyncExample.h; sourceTree = "<group>"; };
+		ABDC31971BEA00AC0012A159 /* YYTextAsyncExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextAsyncExample.m; sourceTree = "<group>"; };
+		ABDC31981BEA00AC0012A159 /* YYTextExampleHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextExampleHelper.h; sourceTree = "<group>"; };
+		ABDC31991BEA00AC0012A159 /* YYTextExampleHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextExampleHelper.m; sourceTree = "<group>"; };
+		ABDC31A61BEA01080012A159 /* UIView+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31A71BEA01080012A159 /* UIView+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31A81BEA01080012A159 /* UIControl+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIControl+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31A91BEA01080012A159 /* UIControl+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31AA1BEA01080012A159 /* UIGestureRecognizer+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIGestureRecognizer+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31AB1BEA01080012A159 /* UIGestureRecognizer+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIGestureRecognizer+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31AF1BEA01700012A159 /* UIImage+YYWebImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+YYWebImage.h"; sourceTree = "<group>"; };
+		ABDC31B01BEA01700012A159 /* UIImage+YYWebImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+YYWebImage.m"; sourceTree = "<group>"; };
+		ABDC31B21BEA02D50012A159 /* NSBundle+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31B31BEA02D50012A159 /* NSBundle+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31B51BEA02F90012A159 /* NSString+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31B61BEA02F90012A159 /* NSString+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31B81BEA03B20012A159 /* YYGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYGestureRecognizer.h; sourceTree = "<group>"; };
+		ABDC31B91BEA03B20012A159 /* YYGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYGestureRecognizer.m; sourceTree = "<group>"; };
+		ABDC31BB1BEA03EF0012A159 /* YYFPSLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYFPSLabel.h; sourceTree = "<group>"; };
+		ABDC31BC1BEA03EF0012A159 /* YYFPSLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYFPSLabel.m; sourceTree = "<group>"; };
+		ABDC31BE1BEA05640012A159 /* CALayer+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CALayer+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31BF1BEA05640012A159 /* CALayer+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CALayer+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31C11BEA05990012A159 /* NSData+YYAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+YYAdd.h"; sourceTree = "<group>"; };
+		ABDC31C21BEA05990012A159 /* NSData+YYAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+YYAdd.m"; sourceTree = "<group>"; };
+		ABDC31C41BEA06070012A159 /* EmoticonQQ.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = EmoticonQQ.bundle; sourceTree = "<group>"; };
+		ABDC31C61BEA06DB0012A159 /* YYWeakProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYWeakProxy.h; sourceTree = "<group>"; };
+		ABDC31C71BEA06DB0012A159 /* YYWeakProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYWeakProxy.m; sourceTree = "<group>"; };
+		ABDC31C91BEA07160012A159 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		ABDC31CB1BEA071B0012A159 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
+		ABDC31CD1BEA07290012A159 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+		ABDC31D11BEA083F0012A159 /* pia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pia@2x.png"; sourceTree = "<group>"; };
+		ABDC31D31BEA08840012A159 /* dribbble64_imageio.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dribbble64_imageio.png; sourceTree = "<group>"; };
+		ABDC31D51BEA09310012A159 /* dribbble256_imageio.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dribbble256_imageio.png; sourceTree = "<group>"; };
+		ABDC31D81BEA0C5A0012A159 /* Animated image support.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Animated image support.txt"; sourceTree = "<group>"; };
+		ABDC31D91BEA0C5A0012A159 /* YYAnimatedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYAnimatedImageView.h; sourceTree = "<group>"; };
+		ABDC31DA1BEA0C5A0012A159 /* YYAnimatedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYAnimatedImageView.m; sourceTree = "<group>"; };
+		ABDC31DB1BEA0C5A0012A159 /* YYFrameImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYFrameImage.h; sourceTree = "<group>"; };
+		ABDC31DC1BEA0C5A0012A159 /* YYFrameImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYFrameImage.m; sourceTree = "<group>"; };
+		ABDC31DD1BEA0C5A0012A159 /* YYImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYImage.h; sourceTree = "<group>"; };
+		ABDC31DE1BEA0C5A0012A159 /* YYImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYImage.m; sourceTree = "<group>"; };
+		ABDC31DF1BEA0C5A0012A159 /* YYImageCoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYImageCoder.h; sourceTree = "<group>"; };
+		ABDC31E01BEA0C5A0012A159 /* YYImageCoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYImageCoder.m; sourceTree = "<group>"; };
+		ABDC31E11BEA0C5A0012A159 /* YYSpriteSheetImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYSpriteSheetImage.h; sourceTree = "<group>"; };
+		ABDC31E21BEA0C5A0012A159 /* YYSpriteSheetImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYSpriteSheetImage.m; sourceTree = "<group>"; };
+		ABDC320E1BEB35DB0012A159 /* YYTextTagExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYTextTagExample.h; sourceTree = "<group>"; };
+		ABDC320F1BEB35DB0012A159 /* YYTextTagExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYTextTagExample.m; sourceTree = "<group>"; };
+		D97539261BD2896100C6F4B8 /* YYTextDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = YYTextDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		D975392A1BD2896100C6F4B8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		D975392C1BD2896100C6F4B8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		D975392D1BD2896100C6F4B8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		D975392F1BD2896100C6F4B8 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
+		D97539301BD2896100C6F4B8 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+		D97539331BD2896100C6F4B8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		D97539351BD2896100C6F4B8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		D97539381BD2896100C6F4B8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		D975393A1BD2896100C6F4B8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		D975394A1BD289B400C6F4B8 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+		D975394C1BD289B800C6F4B8 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
+		D975394E1BD289BC00C6F4B8 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
+		D97539501BD289C000C6F4B8 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		D97539521BD289C400C6F4B8 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		D97539541BD289C800C6F4B8 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		D97539231BD2896100C6F4B8 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ABDC31CE1BEA07290012A159 /* SystemConfiguration.framework in Frameworks */,
+				D975394B1BD289B400C6F4B8 /* MobileCoreServices.framework in Frameworks */,
+				ABDC31CC1BEA071B0012A159 /* ImageIO.framework in Frameworks */,
+				ABDC31CA1BEA07160012A159 /* libz.tbd in Frameworks */,
+				D97539551BD289C800C6F4B8 /* CoreFoundation.framework in Frameworks */,
+				D97539531BD289C400C6F4B8 /* UIKit.framework in Frameworks */,
+				D97539511BD289C000C6F4B8 /* QuartzCore.framework in Frameworks */,
+				D975394F1BD289BC00C6F4B8 /* CoreText.framework in Frameworks */,
+				D975394D1BD289B800C6F4B8 /* Accelerate.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		ABDC31231BE9FB990012A159 /* YYText */ = {
+			isa = PBXGroup;
+			children = (
+				ABDC31551BE9FB990012A159 /* YYText.h */,
+				ABDC31531BE9FB990012A159 /* YYLabel.h */,
+				ABDC31541BE9FB990012A159 /* YYLabel.m */,
+				ABDC31561BE9FB990012A159 /* YYTextView.h */,
+				ABDC31571BE9FB990012A159 /* YYTextView.m */,
+				ABDC31371BE9FB990012A159 /* String */,
+				ABDC31241BE9FB990012A159 /* Component */,
+				ABDC31421BE9FB990012A159 /* Utility */,
+			);
+			name = YYText;
+			path = ../YYText;
+			sourceTree = "<group>";
+		};
+		ABDC31241BE9FB990012A159 /* Component */ = {
+			isa = PBXGroup;
+			children = (
+				ABDC312F1BE9FB990012A159 /* YYTextLayout.h */,
+				ABDC31301BE9FB990012A159 /* YYTextLayout.m */,
+				ABDC31311BE9FB990012A159 /* YYTextLine.h */,
+				ABDC31321BE9FB990012A159 /* YYTextLine.m */,
+				ABDC312B1BE9FB990012A159 /* YYTextInput.h */,
+				ABDC312C1BE9FB990012A159 /* YYTextInput.m */,
+				ABDC31271BE9FB990012A159 /* YYTextDebugOption.h */,
+				ABDC31281BE9FB990012A159 /* YYTextDebugOption.m */,
+				ABDC31251BE9FB990012A159 /* YYTextContainerView.h */,
+				ABDC31261BE9FB990012A159 /* YYTextContainerView.m */,
+				ABDC31351BE9FB990012A159 /* YYTextSelectionView.h */,
+				ABDC31361BE9FB990012A159 /* YYTextSelectionView.m */,
+				ABDC31331BE9FB990012A159 /* YYTextMagnifier.h */,
+				ABDC31341BE9FB990012A159 /* YYTextMagnifier.m */,
+				ABDC31291BE9FB990012A159 /* YYTextEffectWindow.h */,
+				ABDC312A1BE9FB990012A159 /* YYTextEffectWindow.m */,
+				ABDC312D1BE9FB990012A159 /* YYTextKeyboardManager.h */,
+				ABDC312E1BE9FB990012A159 /* YYTextKeyboardManager.m */,
+			);
+			path = Component;
+			sourceTree = "<group>";
+		};
+		ABDC31371BE9FB990012A159 /* String */ = {
+			isa = PBXGroup;
+			children = (
+				ABDC313A1BE9FB990012A159 /* YYTextAttribute.h */,
+				ABDC313B1BE9FB990012A159 /* YYTextAttribute.m */,
+				ABDC31381BE9FB990012A159 /* YYTextArchiver.h */,
+				ABDC31391BE9FB990012A159 /* YYTextArchiver.m */,
+				ABDC313C1BE9FB990012A159 /* YYTextParser.h */,
+				ABDC313D1BE9FB990012A159 /* YYTextParser.m */,
+				ABDC31401BE9FB990012A159 /* YYTextRunDelegate.h */,
+				ABDC31411BE9FB990012A159 /* YYTextRunDelegate.m */,
+				ABDC313E1BE9FB990012A159 /* YYTextRubyAnnotation.h */,
+				ABDC313F1BE9FB990012A159 /* YYTextRubyAnnotation.m */,
+			);
+			path = String;
+			sourceTree = "<group>";
+		};
+		ABDC31421BE9FB990012A159 /* Utility */ = {
+			isa = PBXGroup;
+			children = (
+				ABDC314F1BE9FB990012A159 /* YYTextUtilities.h */,
+				ABDC31501BE9FB990012A159 /* YYTextUtilities.m */,
+				ABDC31511BE9FB990012A159 /* YYTextWeakProxy.h */,
+				ABDC31521BE9FB990012A159 /* YYTextWeakProxy.m */,
+				ABDC314D1BE9FB990012A159 /* YYTextTransaction.h */,
+				ABDC314E1BE9FB990012A159 /* YYTextTransaction.m */,
+				ABDC314B1BE9FB990012A159 /* YYTextAsyncLayer.h */,
+				ABDC314C1BE9FB990012A159 /* YYTextAsyncLayer.m */,
+				ABDC31491BE9FB990012A159 /* UIView+YYText.h */,
+				ABDC314A1BE9FB990012A159 /* UIView+YYText.m */,
+				ABDC31431BE9FB990012A159 /* NSAttributedString+YYText.h */,
+				ABDC31441BE9FB990012A159 /* NSAttributedString+YYText.m */,
+				ABDC31451BE9FB990012A159 /* NSParagraphStyle+YYText.h */,
+				ABDC31461BE9FB990012A159 /* NSParagraphStyle+YYText.m */,
+				ABDC31471BE9FB990012A159 /* UIPasteboard+YYText.h */,
+				ABDC31481BE9FB990012A159 /* UIPasteboard+YYText.m */,
+			);
+			path = Utility;
+			sourceTree = "<group>";
+		};
+		ABDC31D71BEA0C5A0012A159 /* YYImage */ = {
+			isa = PBXGroup;
+			children = (
+				ABDC31D81BEA0C5A0012A159 /* Animated image support.txt */,
+				ABDC31D91BEA0C5A0012A159 /* YYAnimatedImageView.h */,
+				ABDC31DA1BEA0C5A0012A159 /* YYAnimatedImageView.m */,
+				ABDC31DB1BEA0C5A0012A159 /* YYFrameImage.h */,
+				ABDC31DC1BEA0C5A0012A159 /* YYFrameImage.m */,
+				ABDC31DD1BEA0C5A0012A159 /* YYImage.h */,
+				ABDC31DE1BEA0C5A0012A159 /* YYImage.m */,
+				ABDC31DF1BEA0C5A0012A159 /* YYImageCoder.h */,
+				ABDC31E01BEA0C5A0012A159 /* YYImageCoder.m */,
+				ABDC31E11BEA0C5A0012A159 /* YYSpriteSheetImage.h */,
+				ABDC31E21BEA0C5A0012A159 /* YYSpriteSheetImage.m */,
+			);
+			name = YYImage;
+			path = YYTextDemo/YYImage;
+			sourceTree = "<group>";
+		};
+		D975391D1BD2896100C6F4B8 = {
+			isa = PBXGroup;
+			children = (
+				ABDC31D71BEA0C5A0012A159 /* YYImage */,
+				ABDC31231BE9FB990012A159 /* YYText */,
+				D97539281BD2896100C6F4B8 /* YYTextDemo */,
+				D97539271BD2896100C6F4B8 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		D97539271BD2896100C6F4B8 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				D97539261BD2896100C6F4B8 /* YYTextDemo.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		D97539281BD2896100C6F4B8 /* YYTextDemo */ = {
+			isa = PBXGroup;
+			children = (
+				ABDC31821BEA00AC0012A159 /* YYTextExample.h */,
+				ABDC31831BEA00AC0012A159 /* YYTextExample.m */,
+				ABDC31841BEA00AC0012A159 /* YYTextAttributeExample.h */,
+				ABDC31851BEA00AC0012A159 /* YYTextAttributeExample.m */,
+				ABDC320E1BEB35DB0012A159 /* YYTextTagExample.h */,
+				ABDC320F1BEB35DB0012A159 /* YYTextTagExample.m */,
+				ABDC31861BEA00AC0012A159 /* YYTextAttachmentExample.h */,
+				ABDC31871BEA00AC0012A159 /* YYTextAttachmentExample.m */,
+				ABDC31881BEA00AC0012A159 /* YYTextEditExample.h */,
+				ABDC31891BEA00AC0012A159 /* YYTextEditExample.m */,
+				ABDC318A1BEA00AC0012A159 /* YYTextMarkdownExample.h */,
+				ABDC318B1BEA00AC0012A159 /* YYTextMarkdownExample.m */,
+				ABDC318C1BEA00AC0012A159 /* YYTextEmoticonExample.h */,
+				ABDC318D1BEA00AC0012A159 /* YYTextEmoticonExample.m */,
+				ABDC318E1BEA00AC0012A159 /* YYTextBindingExample.h */,
+				ABDC318F1BEA00AC0012A159 /* YYTextBindingExample.m */,
+				ABDC31901BEA00AC0012A159 /* YYTextCopyPasteExample.h */,
+				ABDC31911BEA00AC0012A159 /* YYTextCopyPasteExample.m */,
+				ABDC31921BEA00AC0012A159 /* YYTextUndoRedoExample.h */,
+				ABDC31931BEA00AC0012A159 /* YYTextUndoRedoExample.m */,
+				ABDC31941BEA00AC0012A159 /* YYTextRubyExample.h */,
+				ABDC31951BEA00AC0012A159 /* YYTextRubyExample.m */,
+				ABDC31961BEA00AC0012A159 /* YYTextAsyncExample.h */,
+				ABDC31971BEA00AC0012A159 /* YYTextAsyncExample.m */,
+				ABDC31981BEA00AC0012A159 /* YYTextExampleHelper.h */,
+				ABDC31991BEA00AC0012A159 /* YYTextExampleHelper.m */,
+				ABDC31D51BEA09310012A159 /* dribbble256_imageio.png */,
+				ABDC31D31BEA08840012A159 /* dribbble64_imageio.png */,
+				ABDC31D11BEA083F0012A159 /* pia@2x.png */,
+				ABDC31C41BEA06070012A159 /* EmoticonQQ.bundle */,
+				D97539291BD2896100C6F4B8 /* Supporting Files */,
+				ABDC31C91BEA07160012A159 /* libz.tbd */,
+			);
+			path = YYTextDemo;
+			sourceTree = "<group>";
+		};
+		D97539291BD2896100C6F4B8 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				D975392C1BD2896100C6F4B8 /* AppDelegate.h */,
+				D975392D1BD2896100C6F4B8 /* AppDelegate.m */,
+				D975392F1BD2896100C6F4B8 /* ViewController.h */,
+				D97539301BD2896100C6F4B8 /* ViewController.m */,
+				ABDC31A61BEA01080012A159 /* UIView+YYAdd.h */,
+				ABDC31A71BEA01080012A159 /* UIView+YYAdd.m */,
+				ABDC31A81BEA01080012A159 /* UIControl+YYAdd.h */,
+				ABDC31A91BEA01080012A159 /* UIControl+YYAdd.m */,
+				ABDC31AA1BEA01080012A159 /* UIGestureRecognizer+YYAdd.h */,
+				ABDC31AB1BEA01080012A159 /* UIGestureRecognizer+YYAdd.m */,
+				ABDC31C11BEA05990012A159 /* NSData+YYAdd.h */,
+				ABDC31C21BEA05990012A159 /* NSData+YYAdd.m */,
+				ABDC31BE1BEA05640012A159 /* CALayer+YYAdd.h */,
+				ABDC31BF1BEA05640012A159 /* CALayer+YYAdd.m */,
+				ABDC31AF1BEA01700012A159 /* UIImage+YYWebImage.h */,
+				ABDC31B01BEA01700012A159 /* UIImage+YYWebImage.m */,
+				ABDC31B51BEA02F90012A159 /* NSString+YYAdd.h */,
+				ABDC31B61BEA02F90012A159 /* NSString+YYAdd.m */,
+				ABDC31B21BEA02D50012A159 /* NSBundle+YYAdd.h */,
+				ABDC31B31BEA02D50012A159 /* NSBundle+YYAdd.m */,
+				ABDC31B81BEA03B20012A159 /* YYGestureRecognizer.h */,
+				ABDC31B91BEA03B20012A159 /* YYGestureRecognizer.m */,
+				ABDC31BB1BEA03EF0012A159 /* YYFPSLabel.h */,
+				ABDC31BC1BEA03EF0012A159 /* YYFPSLabel.m */,
+				ABDC31C61BEA06DB0012A159 /* YYWeakProxy.h */,
+				ABDC31C71BEA06DB0012A159 /* YYWeakProxy.m */,
+				D97539321BD2896100C6F4B8 /* Main.storyboard */,
+				D97539351BD2896100C6F4B8 /* Assets.xcassets */,
+				D97539371BD2896100C6F4B8 /* LaunchScreen.storyboard */,
+				D975393A1BD2896100C6F4B8 /* Info.plist */,
+				D975392A1BD2896100C6F4B8 /* main.m */,
+				ABDC31CD1BEA07290012A159 /* SystemConfiguration.framework */,
+				ABDC31CB1BEA071B0012A159 /* ImageIO.framework */,
+				D97539541BD289C800C6F4B8 /* CoreFoundation.framework */,
+				D97539521BD289C400C6F4B8 /* UIKit.framework */,
+				D97539501BD289C000C6F4B8 /* QuartzCore.framework */,
+				D975394E1BD289BC00C6F4B8 /* CoreText.framework */,
+				D975394C1BD289B800C6F4B8 /* Accelerate.framework */,
+				D975394A1BD289B400C6F4B8 /* MobileCoreServices.framework */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		D97539251BD2896100C6F4B8 /* YYTextDemo */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D975393D1BD2896100C6F4B8 /* Build configuration list for PBXNativeTarget "YYTextDemo" */;
+			buildPhases = (
+				D97539221BD2896100C6F4B8 /* Sources */,
+				D97539231BD2896100C6F4B8 /* Frameworks */,
+				D97539241BD2896100C6F4B8 /* Resources */,
+				D97539481BD2899B00C6F4B8 /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = YYTextDemo;
+			productName = YYTextDemo;
+			productReference = D97539261BD2896100C6F4B8 /* YYTextDemo.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		D975391E1BD2896100C6F4B8 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0700;
+				ORGANIZATIONNAME = ibireme;
+				TargetAttributes = {
+					D97539251BD2896100C6F4B8 = {
+						CreatedOnToolsVersion = 7.0.1;
+					};
+				};
+			};
+			buildConfigurationList = D97539211BD2896100C6F4B8 /* Build configuration list for PBXProject "YYTextDemo" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = D975391D1BD2896100C6F4B8;
+			productRefGroup = D97539271BD2896100C6F4B8 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				D97539251BD2896100C6F4B8 /* YYTextDemo */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		D97539241BD2896100C6F4B8 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D97539391BD2896100C6F4B8 /* LaunchScreen.storyboard in Resources */,
+				D97539361BD2896100C6F4B8 /* Assets.xcassets in Resources */,
+				ABDC31D21BEA083F0012A159 /* pia@2x.png in Resources */,
+				ABDC31E31BEA0C5A0012A159 /* Animated image support.txt in Resources */,
+				ABDC31D41BEA08840012A159 /* dribbble64_imageio.png in Resources */,
+				ABDC31C51BEA06070012A159 /* EmoticonQQ.bundle in Resources */,
+				D97539341BD2896100C6F4B8 /* Main.storyboard in Resources */,
+				ABDC31D61BEA09310012A159 /* dribbble256_imageio.png in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		D97539221BD2896100C6F4B8 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ABDC31671BE9FB990012A159 /* NSParagraphStyle+YYText.m in Sources */,
+				ABDC316F1BE9FB990012A159 /* YYTextView.m in Sources */,
+				ABDC31691BE9FB990012A159 /* UIView+YYText.m in Sources */,
+				ABDC319F1BEA00AC0012A159 /* YYTextEmoticonExample.m in Sources */,
+				ABDC316E1BE9FB990012A159 /* YYLabel.m in Sources */,
+				ABDC315D1BE9FB990012A159 /* YYTextLayout.m in Sources */,
+				ABDC31651BE9FB990012A159 /* YYTextRunDelegate.m in Sources */,
+				ABDC316B1BE9FB990012A159 /* YYTextTransaction.m in Sources */,
+				ABDC319C1BEA00AC0012A159 /* YYTextAttachmentExample.m in Sources */,
+				ABDC31621BE9FB990012A159 /* YYTextAttribute.m in Sources */,
+				ABDC31A41BEA00AC0012A159 /* YYTextAsyncExample.m in Sources */,
+				ABDC319E1BEA00AC0012A159 /* YYTextMarkdownExample.m in Sources */,
+				ABDC31611BE9FB990012A159 /* YYTextArchiver.m in Sources */,
+				ABDC31681BE9FB990012A159 /* UIPasteboard+YYText.m in Sources */,
+				ABDC31E61BEA0C5A0012A159 /* YYImage.m in Sources */,
+				ABDC315F1BE9FB990012A159 /* YYTextMagnifier.m in Sources */,
+				ABDC31591BE9FB990012A159 /* YYTextDebugOption.m in Sources */,
+				ABDC31A21BEA00AC0012A159 /* YYTextUndoRedoExample.m in Sources */,
+				ABDC31641BE9FB990012A159 /* YYTextRubyAnnotation.m in Sources */,
+				ABDC31E81BEA0C5A0012A159 /* YYSpriteSheetImage.m in Sources */,
+				ABDC32101BEB35DB0012A159 /* YYTextTagExample.m in Sources */,
+				ABDC315E1BE9FB990012A159 /* YYTextLine.m in Sources */,
+				ABDC31601BE9FB990012A159 /* YYTextSelectionView.m in Sources */,
+				ABDC31B41BEA02D50012A159 /* NSBundle+YYAdd.m in Sources */,
+				ABDC31E41BEA0C5A0012A159 /* YYAnimatedImageView.m in Sources */,
+				ABDC31BD1BEA03EF0012A159 /* YYFPSLabel.m in Sources */,
+				D97539311BD2896100C6F4B8 /* ViewController.m in Sources */,
+				ABDC31C81BEA06DB0012A159 /* YYWeakProxy.m in Sources */,
+				ABDC31C01BEA05640012A159 /* CALayer+YYAdd.m in Sources */,
+				ABDC31661BE9FB990012A159 /* NSAttributedString+YYText.m in Sources */,
+				ABDC31AC1BEA01080012A159 /* UIView+YYAdd.m in Sources */,
+				ABDC31A51BEA00AC0012A159 /* YYTextExampleHelper.m in Sources */,
+				ABDC31E51BEA0C5A0012A159 /* YYFrameImage.m in Sources */,
+				ABDC316C1BE9FB990012A159 /* YYTextUtilities.m in Sources */,
+				ABDC31581BE9FB990012A159 /* YYTextContainerView.m in Sources */,
+				ABDC31E71BEA0C5A0012A159 /* YYImageCoder.m in Sources */,
+				ABDC316A1BE9FB990012A159 /* YYTextAsyncLayer.m in Sources */,
+				ABDC319D1BEA00AC0012A159 /* YYTextEditExample.m in Sources */,
+				D975392E1BD2896100C6F4B8 /* AppDelegate.m in Sources */,
+				ABDC31AD1BEA01080012A159 /* UIControl+YYAdd.m in Sources */,
+				ABDC316D1BE9FB990012A159 /* YYTextWeakProxy.m in Sources */,
+				ABDC31AE1BEA01080012A159 /* UIGestureRecognizer+YYAdd.m in Sources */,
+				ABDC31631BE9FB990012A159 /* YYTextParser.m in Sources */,
+				ABDC31C31BEA05990012A159 /* NSData+YYAdd.m in Sources */,
+				ABDC31A01BEA00AC0012A159 /* YYTextBindingExample.m in Sources */,
+				ABDC319B1BEA00AC0012A159 /* YYTextAttributeExample.m in Sources */,
+				D975392B1BD2896100C6F4B8 /* main.m in Sources */,
+				ABDC315C1BE9FB990012A159 /* YYTextKeyboardManager.m in Sources */,
+				ABDC315A1BE9FB990012A159 /* YYTextEffectWindow.m in Sources */,
+				ABDC315B1BE9FB990012A159 /* YYTextInput.m in Sources */,
+				ABDC31A31BEA00AC0012A159 /* YYTextRubyExample.m in Sources */,
+				ABDC319A1BEA00AC0012A159 /* YYTextExample.m in Sources */,
+				ABDC31BA1BEA03B20012A159 /* YYGestureRecognizer.m in Sources */,
+				ABDC31A11BEA00AC0012A159 /* YYTextCopyPasteExample.m in Sources */,
+				ABDC31B11BEA01700012A159 /* UIImage+YYWebImage.m in Sources */,
+				ABDC31B71BEA02F90012A159 /* NSString+YYAdd.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		D97539321BD2896100C6F4B8 /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				D97539331BD2896100C6F4B8 /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		D97539371BD2896100C6F4B8 /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				D97539381BD2896100C6F4B8 /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		D975393B1BD2896100C6F4B8 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+			};
+			name = Debug;
+		};
+		D975393C1BD2896100C6F4B8 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		D975393E1BD2896100C6F4B8 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				COMPRESS_PNG_FILES = NO;
+				INFOPLIST_FILE = YYTextDemo/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.ibireme.YYTextDemo;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		D975393F1BD2896100C6F4B8 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				COMPRESS_PNG_FILES = NO;
+				INFOPLIST_FILE = YYTextDemo/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.ibireme.YYTextDemo;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		D97539211BD2896100C6F4B8 /* Build configuration list for PBXProject "YYTextDemo" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D975393B1BD2896100C6F4B8 /* Debug */,
+				D975393C1BD2896100C6F4B8 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		D975393D1BD2896100C6F4B8 /* Build configuration list for PBXNativeTarget "YYTextDemo" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D975393E1BD2896100C6F4B8 /* Debug */,
+				D975393F1BD2896100C6F4B8 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = D975391E1BD2896100C6F4B8 /* Project object */;
+}

+ 7 - 0
Demo/YYTextDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:YYTextDemo.xcodeproj">
+   </FileRef>
+</Workspace>

+ 17 - 0
Demo/YYTextDemo/AppDelegate.h

@@ -0,0 +1,17 @@
+//
+//  AppDelegate.h
+//  YYTextDemo
+//
+//  Created by ibireme on 15/10/17.
+//  Copyright © 2015年 ibireme. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+
+@end
+

+ 45 - 0
Demo/YYTextDemo/AppDelegate.m

@@ -0,0 +1,45 @@
+//
+//  AppDelegate.m
+//  YYTextDemo
+//
+//  Created by ibireme on 15/10/17.
+//  Copyright © 2015年 ibireme. All rights reserved.
+//
+
+#import "AppDelegate.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    // Override point for customization after application launch.
+    return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+@end

+ 38 - 0
Demo/YYTextDemo/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,38 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 27 - 0
Demo/YYTextDemo/Base.lproj/LaunchScreen.storyboard

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8150" systemVersion="15A204g" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8122"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <animations/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>

+ 27 - 0
Demo/YYTextDemo/Base.lproj/Main.storyboard

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8191" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <animations/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+        </scene>
+    </scenes>
+</document>

+ 88 - 0
Demo/YYTextDemo/CALayer+YYAdd.h

@@ -0,0 +1,88 @@
+//
+//  CALayer+YYAdd.h
+//  YYKit <https://github.com/ibireme/YYKit>
+//
+//  Created by ibireme on 14/5/10.
+//  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>
+#import <QuartzCore/QuartzCore.h>
+
+/**
+ Provides extensions for `CALayer`.
+ */
+@interface CALayer (YYAdd)
+
+/**
+ Take snapshot without transform, image's size equals to bounds.
+ */
+- (UIImage *)snapshotImage;
+
+/**
+ Take snapshot without transform, PDF's page size equals to bounds.
+ */
+- (NSData *)snapshotPDF;
+
+/**
+ Shortcut to set the layer's shadow
+ 
+ @param color  Shadow Color
+ @param offset Shadow offset
+ @param radius Shadow radius
+ */
+- (void)setLayerShadow:(UIColor*)color offset:(CGSize)offset radius:(CGFloat)radius;
+
+/**
+ Remove all sublayers.
+ */
+- (void)removeAllSublayers;
+
+@property (nonatomic) CGFloat left;        ///< Shortcut for frame.origin.x.
+@property (nonatomic) CGFloat top;         ///< Shortcut for frame.origin.y
+@property (nonatomic) CGFloat right;       ///< Shortcut for frame.origin.x + frame.size.width
+@property (nonatomic) CGFloat bottom;      ///< Shortcut for frame.origin.y + frame.size.height
+@property (nonatomic) CGFloat width;       ///< Shortcut for frame.size.width.
+@property (nonatomic) CGFloat height;      ///< Shortcut for frame.size.height.
+@property (nonatomic) CGPoint center;      ///< Shortcut for center.
+@property (nonatomic) CGFloat centerX;     ///< Shortcut for center.x
+@property (nonatomic) CGFloat centerY;     ///< Shortcut for center.y
+@property (nonatomic) CGPoint origin;      ///< Shortcut for frame.origin.
+@property (nonatomic, getter=frameSize, setter=setFrameSize:) CGSize  size; ///< Shortcut for frame.size.
+
+
+@property (nonatomic) CGFloat transformRotation;     ///< key path "tranform.rotation"
+@property (nonatomic) CGFloat transformRotationX;    ///< key path "tranform.rotation.x"
+@property (nonatomic) CGFloat transformRotationY;    ///< key path "tranform.rotation.y"
+@property (nonatomic) CGFloat transformRotationZ;    ///< key path "tranform.rotation.z"
+@property (nonatomic) CGFloat transformScale;        ///< key path "tranform.scale"
+@property (nonatomic) CGFloat transformScaleX;       ///< key path "tranform.scale.x"
+@property (nonatomic) CGFloat transformScaleY;       ///< key path "tranform.scale.y"
+@property (nonatomic) CGFloat transformScaleZ;       ///< key path "tranform.scale.z"
+@property (nonatomic) CGFloat transformTranslationX; ///< key path "tranform.translation.x"
+@property (nonatomic) CGFloat transformTranslationY; ///< key path "tranform.translation.y"
+@property (nonatomic) CGFloat transformTranslationZ; ///< key path "tranform.translation.z"
+
+/**
+ Shortcut for transform.m34, -1/1000 is a good value.
+ It should be set before other transform shortcut.
+ */
+@property (nonatomic, assign) CGFloat transformDepth;
+
+/**
+ Add a fade animation to layer's contents when the contents is changed.
+ 
+ @param duration Animation duration
+ @param curve    Animation curve.
+ */
+- (void)addFadeAnimationWithDuration:(NSTimeInterval)duration curve:(UIViewAnimationCurve)curve;
+
+/**
+ Cancel fade animation which is added with "-addFadeAnimationWithDuration:curve:".
+ */
+- (void)removePreviousFadeAnimation;
+
+@end

+ 313 - 0
Demo/YYTextDemo/CALayer+YYAdd.m

@@ -0,0 +1,313 @@
+//
+//  CALayer+YYAdd.m
+//  YYKit <https://github.com/ibireme/YYKit>
+//
+//  Created by ibireme on 14/5/10.
+//  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 "CALayer+YYAdd.h"
+
+
+
+@implementation CALayer (YYAdd)
+
+- (UIImage *)snapshotImage {
+    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0);
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    [self renderInContext:context];
+    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    return image;
+}
+
+- (NSData *)snapshotPDF {
+    CGRect bounds = self.bounds;
+    NSMutableData* data = [NSMutableData data];
+    CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData((__bridge CFMutableDataRef)data);
+    CGContextRef context = CGPDFContextCreate(consumer, &bounds, NULL);
+    CGDataConsumerRelease(consumer);
+    if (!context) return nil;
+    CGPDFContextBeginPage(context, NULL);
+    CGContextTranslateCTM(context, 0, bounds.size.height);
+    CGContextScaleCTM(context, 1.0, -1.0);
+    [self renderInContext:context];
+    CGPDFContextEndPage(context);
+    CGPDFContextClose(context);
+    CGContextRelease(context);
+    return data;
+}
+
+- (void)setLayerShadow:(UIColor*)color offset:(CGSize)offset radius:(CGFloat)radius {
+    self.shadowColor = color.CGColor;
+    self.shadowOffset = offset;
+    self.shadowRadius = radius;
+    self.shadowOpacity = 1;
+    self.shouldRasterize = YES;
+    self.rasterizationScale = [UIScreen mainScreen].scale;
+}
+
+- (void)removeAllSublayers {
+    while (self.sublayers.count) {
+        [self.sublayers.lastObject removeFromSuperlayer];
+    }
+}
+
+- (CGFloat)left {
+    return self.frame.origin.x;
+}
+
+- (void)setLeft:(CGFloat)x {
+    CGRect frame = self.frame;
+    frame.origin.x = x;
+    self.frame = frame;
+}
+
+- (CGFloat)top {
+    return self.frame.origin.y;
+}
+
+- (void)setTop:(CGFloat)y {
+    CGRect frame = self.frame;
+    frame.origin.y = y;
+    self.frame = frame;
+}
+
+- (CGFloat)right {
+    return self.frame.origin.x + self.frame.size.width;
+}
+
+- (void)setRight:(CGFloat)right {
+    CGRect frame = self.frame;
+    frame.origin.x = right - frame.size.width;
+    self.frame = frame;
+}
+
+- (CGFloat)bottom {
+    return self.frame.origin.y + self.frame.size.height;
+}
+
+- (void)setBottom:(CGFloat)bottom {
+    CGRect frame = self.frame;
+    frame.origin.y = bottom - frame.size.height;
+    self.frame = frame;
+}
+
+- (CGFloat)width {
+    return self.frame.size.width;
+}
+
+- (void)setWidth:(CGFloat)width {
+    CGRect frame = self.frame;
+    frame.size.width = width;
+    self.frame = frame;
+}
+
+- (CGFloat)height {
+    return self.frame.size.height;
+}
+
+- (void)setHeight:(CGFloat)height {
+    CGRect frame = self.frame;
+    frame.size.height = height;
+    self.frame = frame;
+}
+
+- (CGPoint)center {
+    return CGPointMake(self.frame.origin.x + self.frame.size.width * 0.5,
+                       self.frame.origin.y + self.frame.size.height * 0.5);
+}
+
+- (void)setCenter:(CGPoint)center {
+    CGRect frame = self.frame;
+    frame.origin.x = center.x - frame.size.width * 0.5;
+    frame.origin.y = center.y - frame.size.height * 0.5;
+    self.frame = frame;
+}
+
+- (CGFloat)centerX {
+    return self.frame.origin.x + self.frame.size.width * 0.5;
+}
+
+- (void)setCenterX:(CGFloat)centerX {
+    CGRect frame = self.frame;
+    frame.origin.x = centerX - frame.size.width * 0.5;
+    self.frame = frame;
+}
+
+- (CGFloat)centerY {
+    return self.frame.origin.y + self.frame.size.height * 0.5;
+}
+
+- (void)setCenterY:(CGFloat)centerY {
+    CGRect frame = self.frame;
+    frame.origin.y = centerY - frame.size.height * 0.5;
+    self.frame = frame;
+}
+
+- (CGPoint)origin {
+    return self.frame.origin;
+}
+
+- (void)setOrigin:(CGPoint)origin {
+    CGRect frame = self.frame;
+    frame.origin = origin;
+    self.frame = frame;
+}
+
+- (CGSize)frameSize {
+    return self.frame.size;
+}
+
+- (void)setFrameSize:(CGSize)size {
+    CGRect frame = self.frame;
+    frame.size = size;
+    self.frame = frame;
+}
+
+- (CGFloat)transformRotation {
+    NSNumber *v = [self valueForKeyPath:@"transform.rotation"];
+    return v.doubleValue;
+}
+
+- (void)setTransformRotation:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.rotation"];
+}
+
+- (CGFloat)transformRotationX {
+    NSNumber *v = [self valueForKeyPath:@"transform.rotation.x"];
+    return v.doubleValue;
+}
+
+- (void)setTransformRotationX:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.rotation.x"];
+}
+
+- (CGFloat)transformRotationY {
+    NSNumber *v = [self valueForKeyPath:@"transform.rotation.y"];
+    return v.doubleValue;
+}
+
+- (void)setTransformRotationY:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.rotation.y"];
+}
+
+- (CGFloat)transformRotationZ {
+    NSNumber *v = [self valueForKeyPath:@"transform.rotation.z"];
+    return v.doubleValue;
+}
+
+- (void)setTransformRotationZ:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.rotation.z"];
+}
+
+- (CGFloat)transformScaleX {
+    NSNumber *v = [self valueForKeyPath:@"transform.scale.x"];
+    return v.doubleValue;
+}
+
+- (void)setTransformScaleX:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.scale.x"];
+}
+
+- (CGFloat)transformScaleY {
+    NSNumber *v = [self valueForKeyPath:@"transform.scale.y"];
+    return v.doubleValue;
+}
+
+- (void)setTransformScaleY:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.scale.y"];
+}
+
+- (CGFloat)transformScaleZ {
+    NSNumber *v = [self valueForKeyPath:@"transform.scale.z"];
+    return v.doubleValue;
+}
+
+- (void)setTransformScaleZ:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.scale.z"];
+}
+
+- (CGFloat)transformScale {
+    NSNumber *v = [self valueForKeyPath:@"transform.scale"];
+    return v.doubleValue;
+}
+
+- (void)setTransformScale:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.scale"];
+}
+
+- (CGFloat)transformTranslationX {
+    NSNumber *v = [self valueForKeyPath:@"transform.translation.x"];
+    return v.doubleValue;
+}
+
+- (void)setTransformTranslationX:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.translation.x"];
+}
+
+- (CGFloat)transformTranslationY {
+    NSNumber *v = [self valueForKeyPath:@"transform.translation.y"];
+    return v.doubleValue;
+}
+
+- (void)setTransformTranslationY:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.translation.y"];
+}
+
+- (CGFloat)transformTranslationZ {
+    NSNumber *v = [self valueForKeyPath:@"transform.translation.z"];
+    return v.doubleValue;
+}
+
+- (void)setTransformTranslationZ:(CGFloat)v {
+    [self setValue:@(v) forKeyPath:@"transform.translation.z"];
+}
+
+- (CGFloat)transformDepth {
+    return self.transform.m34;
+}
+
+- (void)setTransformDepth:(CGFloat)v {
+    CATransform3D d = self.transform;
+    d.m34 = v;
+    self.transform = d;
+}
+
+- (void)addFadeAnimationWithDuration:(NSTimeInterval)duration curve:(UIViewAnimationCurve)curve {
+    if (duration <= 0) return;
+    
+    NSString *mediaFunction;
+    switch (curve) {
+        case UIViewAnimationCurveEaseInOut: {
+            mediaFunction = kCAMediaTimingFunctionEaseOut;
+        } break;
+        case UIViewAnimationCurveEaseIn: {
+            mediaFunction = kCAMediaTimingFunctionEaseIn;
+        } break;
+        case UIViewAnimationCurveEaseOut: {
+            mediaFunction = kCAMediaTimingFunctionEaseInEaseOut;
+        } break;
+        case UIViewAnimationCurveLinear: {
+            mediaFunction = kCAMediaTimingFunctionLinear;
+        } break;
+        default: {
+            mediaFunction = kCAMediaTimingFunctionLinear;
+        } break;
+    }
+    
+    CATransition *transition = [CATransition animation];
+    transition.duration = duration;
+    transition.timingFunction = [CAMediaTimingFunction functionWithName:mediaFunction];
+    transition.type = kCATransitionFade;
+    [self addAnimation:transition forKey:@"yykit.fade"];
+}
+
+- (void)removePreviousFadeAnimation {
+    [self removeAnimationForKey:@"yykit.fade"];
+}
+
+@end

BIN
Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.png


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.gif


BIN
Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.png


Some files were not shown because too many files changed in this diff