浏览代码

version 0.9.0

ibireme 9 年之前
父节点
当前提交
f33e1b10ea
共有 100 个文件被更改,包括 1310 次插入0 次删除
  1. 7 0
      .travis.yml
  2. 二进制
      Attributes/CoreText and TextKit Attributes.pdf
  3. 二进制
      Attributes/CoreText and TextKit/Attachment.png
  4. 二进制
      Attributes/CoreText and TextKit/BackgroundColor.png
  5. 二进制
      Attributes/CoreText and TextKit/Baseline.png
  6. 二进制
      Attributes/CoreText and TextKit/Color.png
  7. 二进制
      Attributes/CoreText and TextKit/Effect.png
  8. 二进制
      Attributes/CoreText and TextKit/Expansion.png
  9. 二进制
      Attributes/CoreText and TextKit/Font.png
  10. 二进制
      Attributes/CoreText and TextKit/Kern.png
  11. 二进制
      Attributes/CoreText and TextKit/Ligature.png
  12. 二进制
      Attributes/CoreText and TextKit/Link.png
  13. 二进制
      Attributes/CoreText and TextKit/Obliqueness.png
  14. 二进制
      Attributes/CoreText and TextKit/Paragraph/Alignment.png
  15. 二进制
      Attributes/CoreText and TextKit/Paragraph/BaseWritingDirection.png
  16. 二进制
      Attributes/CoreText and TextKit/Paragraph/FirstLineHeadIndent.png
  17. 二进制
      Attributes/CoreText and TextKit/Paragraph/HeadIndent.png
  18. 二进制
      Attributes/CoreText and TextKit/Paragraph/HyphenationFactor.png
  19. 二进制
      Attributes/CoreText and TextKit/Paragraph/LineBreakMode.png
  20. 二进制
      Attributes/CoreText and TextKit/Paragraph/LineHeightMultiple.png
  21. 二进制
      Attributes/CoreText and TextKit/Paragraph/LineSpacing.png
  22. 二进制
      Attributes/CoreText and TextKit/Paragraph/MaximumLineHeight.png
  23. 二进制
      Attributes/CoreText and TextKit/Paragraph/MinimumLineHeight.png
  24. 二进制
      Attributes/CoreText and TextKit/Paragraph/ParagraphSpacing.png
  25. 二进制
      Attributes/CoreText and TextKit/Paragraph/Tab.png
  26. 二进制
      Attributes/CoreText and TextKit/Paragraph/TailIndent.png
  27. 二进制
      Attributes/CoreText and TextKit/Ruby.png
  28. 二进制
      Attributes/CoreText and TextKit/RunDelegate.png
  29. 二进制
      Attributes/CoreText and TextKit/Shadow.png
  30. 二进制
      Attributes/CoreText and TextKit/Strikethrough.png
  31. 二进制
      Attributes/CoreText and TextKit/StrikethroughColor.png
  32. 二进制
      Attributes/CoreText and TextKit/Stroke.png
  33. 二进制
      Attributes/CoreText and TextKit/StrokeColor.png
  34. 二进制
      Attributes/CoreText and TextKit/Superscript.png
  35. 二进制
      Attributes/CoreText and TextKit/Underline.png
  36. 二进制
      Attributes/CoreText and TextKit/UnderlineColor.png
  37. 二进制
      Attributes/CoreText and TextKit/VerticalForms.png
  38. 二进制
      Attributes/CoreText and TextKit/WriteDirection.png
  39. 二进制
      Attributes/YYText Extended/YYTextAttachment.gif
  40. 二进制
      Attributes/YYText Extended/YYTextBackedString.png
  41. 二进制
      Attributes/YYText Extended/YYTextBackgroundBorder.png
  42. 二进制
      Attributes/YYText Extended/YYTextBinding.gif
  43. 二进制
      Attributes/YYText Extended/YYTextBlockBorder.png
  44. 二进制
      Attributes/YYText Extended/YYTextBorder.png
  45. 二进制
      Attributes/YYText Extended/YYTextHighlight.gif
  46. 二进制
      Attributes/YYText Extended/YYTextShadow.png
  47. 二进制
      Attributes/architecture.png
  48. 二进制
      Demo/DemoSnapshot/text_markdown.gif
  49. 二进制
      Demo/DemoSnapshot/text_paste.gif
  50. 二进制
      Demo/DemoSnapshot/text_path.gif
  51. 二进制
      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. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.gif
  62. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.png
  63. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.gif
  64. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.png
  65. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.gif
  66. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.png
  67. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.gif
  68. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.png
  69. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.gif
  70. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.png
  71. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.gif
  72. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.png
  73. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.gif
  74. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.png
  75. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.gif
  76. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.png
  77. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.gif
  78. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.png
  79. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.gif
  80. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.png
  81. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.gif
  82. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.png
  83. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.gif
  84. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.png
  85. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.gif
  86. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.png
  87. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.gif
  88. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.png
  89. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.gif
  90. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.png
  91. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.gif
  92. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.png
  93. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.gif
  94. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.png
  95. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.gif
  96. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.png
  97. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.gif
  98. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.png
  99. 二进制
      Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.gif
  100. 二进制
      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

二进制
Attributes/CoreText and TextKit Attributes.pdf


二进制
Attributes/CoreText and TextKit/Attachment.png


二进制
Attributes/CoreText and TextKit/BackgroundColor.png


二进制
Attributes/CoreText and TextKit/Baseline.png


二进制
Attributes/CoreText and TextKit/Color.png


二进制
Attributes/CoreText and TextKit/Effect.png


二进制
Attributes/CoreText and TextKit/Expansion.png


二进制
Attributes/CoreText and TextKit/Font.png


二进制
Attributes/CoreText and TextKit/Kern.png


二进制
Attributes/CoreText and TextKit/Ligature.png


二进制
Attributes/CoreText and TextKit/Link.png


二进制
Attributes/CoreText and TextKit/Obliqueness.png


二进制
Attributes/CoreText and TextKit/Paragraph/Alignment.png


二进制
Attributes/CoreText and TextKit/Paragraph/BaseWritingDirection.png


二进制
Attributes/CoreText and TextKit/Paragraph/FirstLineHeadIndent.png


二进制
Attributes/CoreText and TextKit/Paragraph/HeadIndent.png


二进制
Attributes/CoreText and TextKit/Paragraph/HyphenationFactor.png


二进制
Attributes/CoreText and TextKit/Paragraph/LineBreakMode.png


二进制
Attributes/CoreText and TextKit/Paragraph/LineHeightMultiple.png


二进制
Attributes/CoreText and TextKit/Paragraph/LineSpacing.png


二进制
Attributes/CoreText and TextKit/Paragraph/MaximumLineHeight.png


二进制
Attributes/CoreText and TextKit/Paragraph/MinimumLineHeight.png


二进制
Attributes/CoreText and TextKit/Paragraph/ParagraphSpacing.png


二进制
Attributes/CoreText and TextKit/Paragraph/Tab.png


二进制
Attributes/CoreText and TextKit/Paragraph/TailIndent.png


二进制
Attributes/CoreText and TextKit/Ruby.png


二进制
Attributes/CoreText and TextKit/RunDelegate.png


二进制
Attributes/CoreText and TextKit/Shadow.png


二进制
Attributes/CoreText and TextKit/Strikethrough.png


二进制
Attributes/CoreText and TextKit/StrikethroughColor.png


二进制
Attributes/CoreText and TextKit/Stroke.png


二进制
Attributes/CoreText and TextKit/StrokeColor.png


二进制
Attributes/CoreText and TextKit/Superscript.png


二进制
Attributes/CoreText and TextKit/Underline.png


二进制
Attributes/CoreText and TextKit/UnderlineColor.png


二进制
Attributes/CoreText and TextKit/VerticalForms.png


二进制
Attributes/CoreText and TextKit/WriteDirection.png


二进制
Attributes/YYText Extended/YYTextAttachment.gif


二进制
Attributes/YYText Extended/YYTextBackedString.png


二进制
Attributes/YYText Extended/YYTextBackgroundBorder.png


二进制
Attributes/YYText Extended/YYTextBinding.gif


二进制
Attributes/YYText Extended/YYTextBlockBorder.png


二进制
Attributes/YYText Extended/YYTextBorder.png


二进制
Attributes/YYText Extended/YYTextHighlight.gif


二进制
Attributes/YYText Extended/YYTextShadow.png


二进制
Attributes/architecture.png


二进制
Demo/DemoSnapshot/text_markdown.gif


二进制
Demo/DemoSnapshot/text_paste.gif


二进制
Demo/DemoSnapshot/text_path.gif


二进制
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

二进制
Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/001@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/002@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/003@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/004@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/005@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/006@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/007@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/008@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/009@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/010@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/011@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/012@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/013@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/014@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/015@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/016@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/017@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/018@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/019@2x.png


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.gif


二进制
Demo/YYTextDemo/EmoticonQQ.bundle/020@2x.png


部分文件因为文件数量过多而无法显示