瀏覽代碼

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


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