From a1f5959544293f43ff1950b803abd8b9cf511ec1 Mon Sep 17 00:00:00 2001 From: wu736139669 Date: Mon, 19 Jan 2015 21:18:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=B9=B3=E6=BB=91?= =?UTF-8?q?=E7=9A=84=E4=B8=8B=E5=95=A6=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 158 +++++++++ .../UserInterfaceState.xcuserstate | Bin 12149 -> 20709 bytes .../ASHMessageTableViewDemo-Prefix.pch | 18 ++ ASHMessageTableViewDemo/AppDelegate.m | 6 +- ASHMessageTableViewDemo/ViewController.m | 306 +++++++++++++++++- .../category/NSString+DocumentPath.h | 13 + .../category/NSString+DocumentPath.m | 17 + .../category/UIImage+StrethImage.h | 14 + .../category/UIImage+StrethImage.m | 21 ++ ASHMessageTableViewDemo/cell/.DS_Store | Bin 0 -> 6148 bytes ASHMessageTableViewDemo/cell/ChartCell.h | 22 ++ ASHMessageTableViewDemo/cell/ChartCell.m | 117 +++++++ ASHMessageTableViewDemo/cell/ChartCellFrame.h | 16 + ASHMessageTableViewDemo/cell/ChartCellFrame.m | 45 +++ .../images/chat_bg_default.jpg | Bin 0 -> 39248 bytes .../images/chat_bottom_keyboard_nor.png | Bin 0 -> 2023 bytes .../images/chat_bottom_keyboard_press.png | Bin 0 -> 2066 bytes .../images/chat_bottom_smile_nor.png | Bin 0 -> 2808 bytes .../images/chat_bottom_smile_press.png | Bin 0 -> 2873 bytes .../images/chat_bottom_textfield.png | Bin 0 -> 1259 bytes .../images/chat_bottom_up_nor.png | Bin 0 -> 1622 bytes .../images/chat_bottom_up_press.png | Bin 0 -> 1568 bytes .../images/chat_bottom_voice_nor.png | Bin 0 -> 2661 bytes .../images/chat_bottom_voice_press.png | Bin 0 -> 2111 bytes .../images/chatfrom_bg_focused.png | Bin 0 -> 2829 bytes .../images/chatfrom_bg_normal.png | Bin 0 -> 3010 bytes .../images/chatto_bg_focused.png | Bin 0 -> 2573 bytes .../images/chatto_bg_normal.png | Bin 0 -> 2711 bytes ASHMessageTableViewDemo/images/icon01.jpg | Bin 0 -> 40086 bytes ASHMessageTableViewDemo/images/icon02.jpg | Bin 0 -> 8056 bytes .../images/toolbar_bottom_bar.png | Bin 0 -> 362 bytes ASHMessageTableViewDemo/messages.plist | 96 ++++++ ASHMessageTableViewDemo/model/.DS_Store | Bin 0 -> 6148 bytes ASHMessageTableViewDemo/model/ChartMessage.h | 22 ++ ASHMessageTableViewDemo/model/ChartMessage.m | 22 ++ ASHMessageTableViewDemo/view/.DS_Store | Bin 0 -> 6148 bytes .../view/ChartContentView.h | 24 ++ .../view/ChartContentView.m | 63 ++++ ASHMessageTableViewDemo/view/KeyBordVIew.h | 23 ++ ASHMessageTableViewDemo/view/KeyBordVIew.m | 149 +++++++++ 40 files changed, 1142 insertions(+), 10 deletions(-) create mode 100644 ASHMessageTableViewDemo/ASHMessageTableViewDemo-Prefix.pch create mode 100644 ASHMessageTableViewDemo/category/NSString+DocumentPath.h create mode 100644 ASHMessageTableViewDemo/category/NSString+DocumentPath.m create mode 100644 ASHMessageTableViewDemo/category/UIImage+StrethImage.h create mode 100644 ASHMessageTableViewDemo/category/UIImage+StrethImage.m create mode 100644 ASHMessageTableViewDemo/cell/.DS_Store create mode 100644 ASHMessageTableViewDemo/cell/ChartCell.h create mode 100644 ASHMessageTableViewDemo/cell/ChartCell.m create mode 100644 ASHMessageTableViewDemo/cell/ChartCellFrame.h create mode 100644 ASHMessageTableViewDemo/cell/ChartCellFrame.m create mode 100644 ASHMessageTableViewDemo/images/chat_bg_default.jpg create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_keyboard_nor.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_keyboard_press.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_smile_nor.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_smile_press.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_textfield.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_up_nor.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_up_press.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_voice_nor.png create mode 100755 ASHMessageTableViewDemo/images/chat_bottom_voice_press.png create mode 100644 ASHMessageTableViewDemo/images/chatfrom_bg_focused.png create mode 100644 ASHMessageTableViewDemo/images/chatfrom_bg_normal.png create mode 100644 ASHMessageTableViewDemo/images/chatto_bg_focused.png create mode 100644 ASHMessageTableViewDemo/images/chatto_bg_normal.png create mode 100644 ASHMessageTableViewDemo/images/icon01.jpg create mode 100644 ASHMessageTableViewDemo/images/icon02.jpg create mode 100755 ASHMessageTableViewDemo/images/toolbar_bottom_bar.png create mode 100644 ASHMessageTableViewDemo/messages.plist create mode 100644 ASHMessageTableViewDemo/model/.DS_Store create mode 100644 ASHMessageTableViewDemo/model/ChartMessage.h create mode 100644 ASHMessageTableViewDemo/model/ChartMessage.m create mode 100644 ASHMessageTableViewDemo/view/.DS_Store create mode 100644 ASHMessageTableViewDemo/view/ChartContentView.h create mode 100644 ASHMessageTableViewDemo/view/ChartContentView.m create mode 100644 ASHMessageTableViewDemo/view/KeyBordVIew.h create mode 100644 ASHMessageTableViewDemo/view/KeyBordVIew.m diff --git a/ASHMessageTableViewDemo.xcodeproj/project.pbxproj b/ASHMessageTableViewDemo.xcodeproj/project.pbxproj index 28ef975..315887d 100644 --- a/ASHMessageTableViewDemo.xcodeproj/project.pbxproj +++ b/ASHMessageTableViewDemo.xcodeproj/project.pbxproj @@ -15,6 +15,31 @@ A97429BB1A68C81C00732735 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = A97429B91A68C81C00732735 /* LaunchScreen.xib */; }; A97429C71A68C81C00732735 /* ASHMessageTableViewDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A97429C61A68C81C00732735 /* ASHMessageTableViewDemoTests.m */; }; A9B965551A6D307B0017F9F2 /* MessageTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B965541A6D307B0017F9F2 /* MessageTableView.m */; }; + A9B965A61A6D35300017F9F2 /* NSString+DocumentPath.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B965961A6D35300017F9F2 /* NSString+DocumentPath.m */; }; + A9B965A71A6D35300017F9F2 /* UIImage+StrethImage.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B965981A6D35300017F9F2 /* UIImage+StrethImage.m */; }; + A9B965A81A6D35300017F9F2 /* ChartCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B9659B1A6D35300017F9F2 /* ChartCell.m */; }; + A9B965A91A6D35300017F9F2 /* ChartCellFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B9659D1A6D35300017F9F2 /* ChartCellFrame.m */; }; + A9B965AA1A6D35300017F9F2 /* ChartMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B965A01A6D35300017F9F2 /* ChartMessage.m */; }; + A9B965AB1A6D35300017F9F2 /* ChartContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B965A31A6D35300017F9F2 /* ChartContentView.m */; }; + A9B965AC1A6D35300017F9F2 /* KeyBordVIew.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B965A51A6D35300017F9F2 /* KeyBordVIew.m */; }; + A9B965C01A6D35820017F9F2 /* chat_bg_default.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A9B965AE1A6D35820017F9F2 /* chat_bg_default.jpg */; }; + A9B965C11A6D35820017F9F2 /* chat_bottom_keyboard_nor.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965AF1A6D35820017F9F2 /* chat_bottom_keyboard_nor.png */; }; + A9B965C21A6D35820017F9F2 /* chat_bottom_keyboard_press.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B01A6D35820017F9F2 /* chat_bottom_keyboard_press.png */; }; + A9B965C31A6D35820017F9F2 /* chat_bottom_smile_nor.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B11A6D35820017F9F2 /* chat_bottom_smile_nor.png */; }; + A9B965C41A6D35820017F9F2 /* chat_bottom_smile_press.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B21A6D35820017F9F2 /* chat_bottom_smile_press.png */; }; + A9B965C51A6D35820017F9F2 /* chat_bottom_textfield.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B31A6D35820017F9F2 /* chat_bottom_textfield.png */; }; + A9B965C61A6D35820017F9F2 /* chat_bottom_up_nor.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B41A6D35820017F9F2 /* chat_bottom_up_nor.png */; }; + A9B965C71A6D35820017F9F2 /* chat_bottom_up_press.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B51A6D35820017F9F2 /* chat_bottom_up_press.png */; }; + A9B965C81A6D35820017F9F2 /* chat_bottom_voice_nor.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B61A6D35820017F9F2 /* chat_bottom_voice_nor.png */; }; + A9B965C91A6D35820017F9F2 /* chat_bottom_voice_press.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B71A6D35820017F9F2 /* chat_bottom_voice_press.png */; }; + A9B965CA1A6D35820017F9F2 /* chatfrom_bg_focused.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B81A6D35820017F9F2 /* chatfrom_bg_focused.png */; }; + A9B965CB1A6D35820017F9F2 /* chatfrom_bg_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965B91A6D35820017F9F2 /* chatfrom_bg_normal.png */; }; + A9B965CC1A6D35820017F9F2 /* chatto_bg_focused.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965BA1A6D35820017F9F2 /* chatto_bg_focused.png */; }; + A9B965CD1A6D35820017F9F2 /* chatto_bg_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965BB1A6D35820017F9F2 /* chatto_bg_normal.png */; }; + A9B965CE1A6D35820017F9F2 /* icon01.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A9B965BC1A6D35820017F9F2 /* icon01.jpg */; }; + A9B965CF1A6D35820017F9F2 /* icon02.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A9B965BD1A6D35820017F9F2 /* icon02.jpg */; }; + A9B965D01A6D35820017F9F2 /* toolbar_bottom_bar.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B965BE1A6D35820017F9F2 /* toolbar_bottom_bar.png */; }; + A9B965D11A6D35820017F9F2 /* messages.plist in Resources */ = {isa = PBXBuildFile; fileRef = A9B965BF1A6D35820017F9F2 /* messages.plist */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,6 +68,39 @@ A97429C61A68C81C00732735 /* ASHMessageTableViewDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHMessageTableViewDemoTests.m; sourceTree = ""; }; A9B965531A6D307B0017F9F2 /* MessageTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageTableView.h; sourceTree = ""; }; A9B965541A6D307B0017F9F2 /* MessageTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageTableView.m; sourceTree = ""; }; + A9B965951A6D35300017F9F2 /* NSString+DocumentPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+DocumentPath.h"; sourceTree = ""; }; + A9B965961A6D35300017F9F2 /* NSString+DocumentPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+DocumentPath.m"; sourceTree = ""; }; + A9B965971A6D35300017F9F2 /* UIImage+StrethImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+StrethImage.h"; sourceTree = ""; }; + A9B965981A6D35300017F9F2 /* UIImage+StrethImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+StrethImage.m"; sourceTree = ""; }; + A9B9659A1A6D35300017F9F2 /* ChartCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChartCell.h; sourceTree = ""; }; + A9B9659B1A6D35300017F9F2 /* ChartCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChartCell.m; sourceTree = ""; }; + A9B9659C1A6D35300017F9F2 /* ChartCellFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChartCellFrame.h; sourceTree = ""; }; + A9B9659D1A6D35300017F9F2 /* ChartCellFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChartCellFrame.m; sourceTree = ""; }; + A9B9659F1A6D35300017F9F2 /* ChartMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChartMessage.h; sourceTree = ""; }; + A9B965A01A6D35300017F9F2 /* ChartMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChartMessage.m; sourceTree = ""; }; + A9B965A21A6D35300017F9F2 /* ChartContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChartContentView.h; sourceTree = ""; }; + A9B965A31A6D35300017F9F2 /* ChartContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChartContentView.m; sourceTree = ""; }; + A9B965A41A6D35300017F9F2 /* KeyBordVIew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyBordVIew.h; sourceTree = ""; }; + A9B965A51A6D35300017F9F2 /* KeyBordVIew.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyBordVIew.m; sourceTree = ""; }; + A9B965AE1A6D35820017F9F2 /* chat_bg_default.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = chat_bg_default.jpg; sourceTree = ""; }; + A9B965AF1A6D35820017F9F2 /* chat_bottom_keyboard_nor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_keyboard_nor.png; sourceTree = ""; }; + A9B965B01A6D35820017F9F2 /* chat_bottom_keyboard_press.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_keyboard_press.png; sourceTree = ""; }; + A9B965B11A6D35820017F9F2 /* chat_bottom_smile_nor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_smile_nor.png; sourceTree = ""; }; + A9B965B21A6D35820017F9F2 /* chat_bottom_smile_press.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_smile_press.png; sourceTree = ""; }; + A9B965B31A6D35820017F9F2 /* chat_bottom_textfield.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_textfield.png; sourceTree = ""; }; + A9B965B41A6D35820017F9F2 /* chat_bottom_up_nor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_up_nor.png; sourceTree = ""; }; + A9B965B51A6D35820017F9F2 /* chat_bottom_up_press.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_up_press.png; sourceTree = ""; }; + A9B965B61A6D35820017F9F2 /* chat_bottom_voice_nor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_voice_nor.png; sourceTree = ""; }; + A9B965B71A6D35820017F9F2 /* chat_bottom_voice_press.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_bottom_voice_press.png; sourceTree = ""; }; + A9B965B81A6D35820017F9F2 /* chatfrom_bg_focused.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatfrom_bg_focused.png; sourceTree = ""; }; + A9B965B91A6D35820017F9F2 /* chatfrom_bg_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatfrom_bg_normal.png; sourceTree = ""; }; + A9B965BA1A6D35820017F9F2 /* chatto_bg_focused.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatto_bg_focused.png; sourceTree = ""; }; + A9B965BB1A6D35820017F9F2 /* chatto_bg_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatto_bg_normal.png; sourceTree = ""; }; + A9B965BC1A6D35820017F9F2 /* icon01.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon01.jpg; sourceTree = ""; }; + A9B965BD1A6D35820017F9F2 /* icon02.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon02.jpg; sourceTree = ""; }; + A9B965BE1A6D35820017F9F2 /* toolbar_bottom_bar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = toolbar_bottom_bar.png; sourceTree = ""; }; + A9B965BF1A6D35820017F9F2 /* messages.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = messages.plist; sourceTree = ""; }; + A9B965D21A6D358B0017F9F2 /* ASHMessageTableViewDemo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ASHMessageTableViewDemo-Prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -84,6 +142,10 @@ A97429A91A68C81C00732735 /* ASHMessageTableViewDemo */ = { isa = PBXGroup; children = ( + A9B965941A6D35300017F9F2 /* category */, + A9B965991A6D35300017F9F2 /* cell */, + A9B9659E1A6D35300017F9F2 /* model */, + A9B965A11A6D35300017F9F2 /* view */, A97429AE1A68C81C00732735 /* AppDelegate.h */, A97429AF1A68C81C00732735 /* AppDelegate.m */, A97429B11A68C81C00732735 /* ViewController.h */, @@ -101,6 +163,9 @@ A97429AA1A68C81C00732735 /* Supporting Files */ = { isa = PBXGroup; children = ( + A9B965D21A6D358B0017F9F2 /* ASHMessageTableViewDemo-Prefix.pch */, + A9B965AD1A6D35820017F9F2 /* images */, + A9B965BF1A6D35820017F9F2 /* messages.plist */, A97429AB1A68C81C00732735 /* Info.plist */, A97429AC1A68C81C00732735 /* main.m */, ); @@ -124,6 +189,72 @@ name = "Supporting Files"; sourceTree = ""; }; + A9B965941A6D35300017F9F2 /* category */ = { + isa = PBXGroup; + children = ( + A9B965951A6D35300017F9F2 /* NSString+DocumentPath.h */, + A9B965961A6D35300017F9F2 /* NSString+DocumentPath.m */, + A9B965971A6D35300017F9F2 /* UIImage+StrethImage.h */, + A9B965981A6D35300017F9F2 /* UIImage+StrethImage.m */, + ); + path = category; + sourceTree = ""; + }; + A9B965991A6D35300017F9F2 /* cell */ = { + isa = PBXGroup; + children = ( + A9B9659A1A6D35300017F9F2 /* ChartCell.h */, + A9B9659B1A6D35300017F9F2 /* ChartCell.m */, + A9B9659C1A6D35300017F9F2 /* ChartCellFrame.h */, + A9B9659D1A6D35300017F9F2 /* ChartCellFrame.m */, + ); + path = cell; + sourceTree = ""; + }; + A9B9659E1A6D35300017F9F2 /* model */ = { + isa = PBXGroup; + children = ( + A9B9659F1A6D35300017F9F2 /* ChartMessage.h */, + A9B965A01A6D35300017F9F2 /* ChartMessage.m */, + ); + path = model; + sourceTree = ""; + }; + A9B965A11A6D35300017F9F2 /* view */ = { + isa = PBXGroup; + children = ( + A9B965A21A6D35300017F9F2 /* ChartContentView.h */, + A9B965A31A6D35300017F9F2 /* ChartContentView.m */, + A9B965A41A6D35300017F9F2 /* KeyBordVIew.h */, + A9B965A51A6D35300017F9F2 /* KeyBordVIew.m */, + ); + path = view; + sourceTree = ""; + }; + A9B965AD1A6D35820017F9F2 /* images */ = { + isa = PBXGroup; + children = ( + A9B965AE1A6D35820017F9F2 /* chat_bg_default.jpg */, + A9B965AF1A6D35820017F9F2 /* chat_bottom_keyboard_nor.png */, + A9B965B01A6D35820017F9F2 /* chat_bottom_keyboard_press.png */, + A9B965B11A6D35820017F9F2 /* chat_bottom_smile_nor.png */, + A9B965B21A6D35820017F9F2 /* chat_bottom_smile_press.png */, + A9B965B31A6D35820017F9F2 /* chat_bottom_textfield.png */, + A9B965B41A6D35820017F9F2 /* chat_bottom_up_nor.png */, + A9B965B51A6D35820017F9F2 /* chat_bottom_up_press.png */, + A9B965B61A6D35820017F9F2 /* chat_bottom_voice_nor.png */, + A9B965B71A6D35820017F9F2 /* chat_bottom_voice_press.png */, + A9B965B81A6D35820017F9F2 /* chatfrom_bg_focused.png */, + A9B965B91A6D35820017F9F2 /* chatfrom_bg_normal.png */, + A9B965BA1A6D35820017F9F2 /* chatto_bg_focused.png */, + A9B965BB1A6D35820017F9F2 /* chatto_bg_normal.png */, + A9B965BC1A6D35820017F9F2 /* icon01.jpg */, + A9B965BD1A6D35820017F9F2 /* icon02.jpg */, + A9B965BE1A6D35820017F9F2 /* toolbar_bottom_bar.png */, + ); + path = images; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -206,7 +337,25 @@ files = ( A97429B61A68C81C00732735 /* Main.storyboard in Resources */, A97429BB1A68C81C00732735 /* LaunchScreen.xib in Resources */, + A9B965CF1A6D35820017F9F2 /* icon02.jpg in Resources */, + A9B965CB1A6D35820017F9F2 /* chatfrom_bg_normal.png in Resources */, + A9B965D01A6D35820017F9F2 /* toolbar_bottom_bar.png in Resources */, + A9B965C51A6D35820017F9F2 /* chat_bottom_textfield.png in Resources */, + A9B965C81A6D35820017F9F2 /* chat_bottom_voice_nor.png in Resources */, + A9B965CA1A6D35820017F9F2 /* chatfrom_bg_focused.png in Resources */, + A9B965C61A6D35820017F9F2 /* chat_bottom_up_nor.png in Resources */, + A9B965C01A6D35820017F9F2 /* chat_bg_default.jpg in Resources */, + A9B965C21A6D35820017F9F2 /* chat_bottom_keyboard_press.png in Resources */, + A9B965D11A6D35820017F9F2 /* messages.plist in Resources */, A97429B81A68C81C00732735 /* Images.xcassets in Resources */, + A9B965C91A6D35820017F9F2 /* chat_bottom_voice_press.png in Resources */, + A9B965CD1A6D35820017F9F2 /* chatto_bg_normal.png in Resources */, + A9B965CC1A6D35820017F9F2 /* chatto_bg_focused.png in Resources */, + A9B965CE1A6D35820017F9F2 /* icon01.jpg in Resources */, + A9B965C31A6D35820017F9F2 /* chat_bottom_smile_nor.png in Resources */, + A9B965C11A6D35820017F9F2 /* chat_bottom_keyboard_nor.png in Resources */, + A9B965C71A6D35820017F9F2 /* chat_bottom_up_press.png in Resources */, + A9B965C41A6D35820017F9F2 /* chat_bottom_smile_press.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -224,10 +373,17 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A9B965A91A6D35300017F9F2 /* ChartCellFrame.m in Sources */, + A9B965A61A6D35300017F9F2 /* NSString+DocumentPath.m in Sources */, + A9B965AC1A6D35300017F9F2 /* KeyBordVIew.m in Sources */, A97429B31A68C81C00732735 /* ViewController.m in Sources */, A9B965551A6D307B0017F9F2 /* MessageTableView.m in Sources */, A97429B01A68C81C00732735 /* AppDelegate.m in Sources */, + A9B965A81A6D35300017F9F2 /* ChartCell.m in Sources */, + A9B965AA1A6D35300017F9F2 /* ChartMessage.m in Sources */, + A9B965AB1A6D35300017F9F2 /* ChartContentView.m in Sources */, A97429AD1A68C81C00732735 /* main.m in Sources */, + A9B965A71A6D35300017F9F2 /* UIImage+StrethImage.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -349,6 +505,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + GCC_PREFIX_HEADER = "ASHMessageTableViewDemo/ASHMessageTableViewDemo-Prefix.pch"; INFOPLIST_FILE = ASHMessageTableViewDemo/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -359,6 +516,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + GCC_PREFIX_HEADER = "ASHMessageTableViewDemo/ASHMessageTableViewDemo-Prefix.pch"; INFOPLIST_FILE = ASHMessageTableViewDemo/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/ASHMessageTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate b/ASHMessageTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate index 9d7aadac07d321c2d241ed6c0ce5361e8634c18e..7fbcc3e4d1026f6d8a5164810d95e66c6310054c 100644 GIT binary patch literal 20709 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 UE`)>dN`Uw&xlsHJ{Vq@bUp5RBwEzGB delta 6931 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 D7FhNQ diff --git a/ASHMessageTableViewDemo/ASHMessageTableViewDemo-Prefix.pch b/ASHMessageTableViewDemo/ASHMessageTableViewDemo-Prefix.pch new file mode 100644 index 0000000..5757274 --- /dev/null +++ b/ASHMessageTableViewDemo/ASHMessageTableViewDemo-Prefix.pch @@ -0,0 +1,18 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#import + +#ifndef __IPHONE_5_0 +#warning "This project uses features only available in iOS SDK 5.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#import "UIImage+StrethImage.h" +#import "NSString+DocumentPath.h" +#endif diff --git a/ASHMessageTableViewDemo/AppDelegate.m b/ASHMessageTableViewDemo/AppDelegate.m index 859c8b4..777398a 100644 --- a/ASHMessageTableViewDemo/AppDelegate.m +++ b/ASHMessageTableViewDemo/AppDelegate.m @@ -7,7 +7,7 @@ // #import "AppDelegate.h" - +#import "ViewController.h" @interface AppDelegate () @end @@ -17,6 +17,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. + self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; + UINavigationController *nav=[[[UINavigationController alloc]initWithRootViewController:[ViewController alloc]]init]; + self.window.rootViewController=nav; + [self.window makeKeyAndVisible]; return YES; } diff --git a/ASHMessageTableViewDemo/ViewController.m b/ASHMessageTableViewDemo/ViewController.m index e57815e..fffdf85 100644 --- a/ASHMessageTableViewDemo/ViewController.m +++ b/ASHMessageTableViewDemo/ViewController.m @@ -7,21 +7,309 @@ // #import "ViewController.h" - -@interface ViewController () - +#import "ChartMessage.h" +#import "ChartCellFrame.h" +#import "ChartCell.h" +#import "KeyBordVIew.h" +#import +#import +#import "MessageTableView.h" +@interface ViewController () +@property (nonatomic,strong) MessageTableView *tableView; +@property (nonatomic,strong) KeyBordVIew *keyBordView; +@property (nonatomic,strong) NSMutableArray *cellFrames; +@property (nonatomic,assign) BOOL recording; +@property (nonatomic,strong) NSString *fileName; +@property (nonatomic,strong) AVAudioRecorder *recorder; +@property (nonatomic,strong) AVAudioPlayer *player; @end - +static NSString *const cellIdentifier=@"QQChart"; @implementation ViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. +{ + UIActivityIndicatorView* _activity; + BOOL _isRefresh; + UIView* _headView; +} +-(void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardHide:) name:UIKeyboardWillHideNotification object:nil]; } -- (void)didReceiveMemoryWarning { +-(void)keyboardShow:(NSNotification *)note +{ + CGRect keyBoardRect=[note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGFloat deltaY=keyBoardRect.size.height; + + [UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{ + + self.view.transform=CGAffineTransformMakeTranslation(0, -deltaY); + }]; +} +-(void)keyboardHide:(NSNotification *)note +{ + [UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{ + self.view.transform = CGAffineTransformIdentity; + }]; +} +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.title=@"QQ chat"; + self.view.backgroundColor=[UIColor whiteColor]; + + //add UItableView + self.tableView=[[MessageTableView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-108) style:UITableViewStylePlain]; + [self.tableView registerClass:[ChartCell class] forCellReuseIdentifier:cellIdentifier]; + self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone; + self.tableView.allowsSelection = NO; + self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chat_bg_default.jpg"]]; + self.tableView.dataSource=self; + self.tableView.delegate=self; + [self.view addSubview:self.tableView]; + + //add keyBorad + + self.keyBordView=[[KeyBordVIew alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-108, self.view.frame.size.width, 44)]; + self.keyBordView.delegate=self; + [self.view addSubview:self.keyBordView]; + //初始化数据 + + // [self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)]; + // [self.tableView addFooterWithTarget:self action:@selector(footerRereshing)]; + + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(testTableView)]; + [self initwithData]; + + _headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)]; + _headView.backgroundColor = [UIColor clearColor]; + + _activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + [_headView addSubview:_activity]; + _activity.frame = CGRectMake(_headView.frame.size.width/2, _headView.frame.size.height/2, 20, 20); + + _tableView.tableHeaderView = _headView; + _headView.hidden = YES; +} +-(void)testTableView +{ + //等待2s + _headView.hidden = NO; + [_activity startAnimating]; + _isRefresh = YES; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + NSString *path=[[NSBundle mainBundle] pathForResource:@"messages" ofType:@"plist"]; + NSArray *data=[NSArray arrayWithContentsOfFile:path]; + + int i = 0; + for(NSDictionary *dict in data){ + if (i>=5) { + break; + } + i++; + ChartCellFrame *cellFrame=[[ChartCellFrame alloc]init]; + ChartMessage *chartMessage=[[ChartMessage alloc]init]; + chartMessage.dict=dict; + cellFrame.chartMessage=chartMessage; + [self.cellFrames insertObject:cellFrame atIndex:0]; + } + + [_tableView reloadData]; + [_activity stopAnimating]; + _headView.hidden = YES; + _isRefresh = NO; + }); + + + + + +} + +-(void)initwithData +{ + self.cellFrames=[NSMutableArray array]; + + NSString *path=[[NSBundle mainBundle] pathForResource:@"messages" ofType:@"plist"]; + NSArray *data=[NSArray arrayWithContentsOfFile:path]; + + for(NSDictionary *dict in data){ + + ChartCellFrame *cellFrame=[[ChartCellFrame alloc]init]; + ChartMessage *chartMessage=[[ChartMessage alloc]init]; + chartMessage.dict=dict; + cellFrame.chartMessage=chartMessage; + [self.cellFrames addObject:cellFrame]; + } + + + +} + +-(void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + if (scrollView.contentOffset.y<=0 && _isRefresh==NO) + { + [self testTableView]; + } +} +-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + NSLog(@"%ld",_cellFrames.count); + return _cellFrames.count; +} +-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + ChartCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; + cell.delegate=self; + cell.cellFrame=self.cellFrames[indexPath.row]; + return cell; + +} +-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [self.cellFrames[indexPath.row] cellHeight]; +} +-(void)chartCell:(ChartCell *)chartCell tapContent:(NSString *)content +{ + if(self.player.isPlaying){ + + [self.player stop]; + } + //播放 + NSString *filePath=[NSString documentPathWith:content]; + NSURL *fileUrl=[NSURL fileURLWithPath:filePath]; + [self initPlayer]; + NSError *error; + self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:fileUrl error:&error]; + [self.player setVolume:1]; + [self.player prepareToPlay]; + [self.player setDelegate:self]; + [self.player play]; + [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; +} +-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag +{ + [[UIDevice currentDevice]setProximityMonitoringEnabled:NO]; + [self.player stop]; + self.player=nil; +} +-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView +{ + + [self.view endEditing:YES]; +} +-(void)KeyBordView:(KeyBordVIew *)keyBoardView textFiledReturn:(UITextField *)textFiled +{ + ChartCellFrame *cellFrame=[[ChartCellFrame alloc]init]; + ChartMessage *chartMessage=[[ChartMessage alloc]init]; + + int random=arc4random_uniform(2); + NSLog(@"%d",random); + chartMessage.icon=[NSString stringWithFormat:@"icon%02d.jpg",random+1]; + chartMessage.messageType=random; + chartMessage.content=textFiled.text; + cellFrame.chartMessage=chartMessage; + + [self.cellFrames addObject:cellFrame]; + [self.tableView reloadData]; + + //滚动到当前行 + + [self tableViewScrollCurrentIndexPath]; + textFiled.text=@""; + +} +-(void)KeyBordView:(KeyBordVIew *)keyBoardView textFiledBegin:(UITextField *)textFiled +{ + [self tableViewScrollCurrentIndexPath]; + +} +-(void)beginRecord +{ + if(self.recording)return; + + self.recording=YES; + + NSDictionary *settings=[NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithFloat:8000],AVSampleRateKey, + [NSNumber numberWithInt:kAudioFormatLinearPCM],AVFormatIDKey, + [NSNumber numberWithInt:1],AVNumberOfChannelsKey, + [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey, + [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey, + [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, + nil]; + [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; + [[AVAudioSession sharedInstance] setActive:YES error:nil]; + NSDate *now = [NSDate date]; + NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; + [dateFormater setDateFormat:@"yyyyMMddHHmmss"]; + NSString *fileName = [NSString stringWithFormat:@"rec_%@.wav",[dateFormater stringFromDate:now]]; + self.fileName=fileName; + NSString *filePath=[NSString documentPathWith:fileName]; + NSURL *fileUrl=[NSURL fileURLWithPath:filePath]; + NSError *error; + self.recorder=[[AVAudioRecorder alloc]initWithURL:fileUrl settings:settings error:&error]; + [self.recorder prepareToRecord]; + [self.recorder setMeteringEnabled:YES]; + [self.recorder peakPowerForChannel:0]; + [self.recorder record]; + +} +-(void)finishRecord +{ + self.recording=NO; + [self.recorder stop]; + self.recorder=nil; + ChartCellFrame *cellFrame=[[ChartCellFrame alloc]init]; + ChartMessage *chartMessage=[[ChartMessage alloc]init]; + + int random=arc4random_uniform(2); + NSLog(@"%d",random); + chartMessage.icon=[NSString stringWithFormat:@"icon%02d.jpg",random+1]; + chartMessage.messageType=random; + chartMessage.content=self.fileName; + cellFrame.chartMessage=chartMessage; + [self.cellFrames addObject:cellFrame]; + [self.tableView reloadData]; + [self tableViewScrollCurrentIndexPath]; + +} +-(void)tableViewScrollCurrentIndexPath +{ + NSIndexPath *indexPath=[NSIndexPath indexPathForRow:self.cellFrames.count-1 inSection:0]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; +} +-(void)initPlayer{ + //初始化播放器的时候如下设置 + UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; + AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, + sizeof(sessionCategory), + &sessionCategory); + + UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; + AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, + sizeof (audioRouteOverride), + &audioRouteOverride); + + AVAudioSession *audioSession = [AVAudioSession sharedInstance]; + //默认情况下扬声器播放 + [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; + [audioSession setActive:YES error:nil]; + audioSession = nil; +} +- (void)didReceiveMemoryWarning +{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end + diff --git a/ASHMessageTableViewDemo/category/NSString+DocumentPath.h b/ASHMessageTableViewDemo/category/NSString+DocumentPath.h new file mode 100644 index 0000000..ac4ba02 --- /dev/null +++ b/ASHMessageTableViewDemo/category/NSString+DocumentPath.h @@ -0,0 +1,13 @@ +// +// NSString+DocumentPath.h +// 气泡 +// +// Created by zzy on 14-5-15. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import + +@interface NSString (DocumentPath) ++(NSString *)documentPathWith:(NSString *)fileName; +@end diff --git a/ASHMessageTableViewDemo/category/NSString+DocumentPath.m b/ASHMessageTableViewDemo/category/NSString+DocumentPath.m new file mode 100644 index 0000000..a4f3d86 --- /dev/null +++ b/ASHMessageTableViewDemo/category/NSString+DocumentPath.m @@ -0,0 +1,17 @@ +// +// NSString+DocumentPath.m +// 气泡 +// +// Created by zzy on 14-5-15. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import "NSString+DocumentPath.h" + +@implementation NSString (DocumentPath) ++(NSString *)documentPathWith:(NSString *)fileName +{ + + return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",fileName]]; +} +@end diff --git a/ASHMessageTableViewDemo/category/UIImage+StrethImage.h b/ASHMessageTableViewDemo/category/UIImage+StrethImage.h new file mode 100644 index 0000000..568d748 --- /dev/null +++ b/ASHMessageTableViewDemo/category/UIImage+StrethImage.h @@ -0,0 +1,14 @@ +// +// UIImage+StrethImage.h +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import + +@interface UIImage (StrethImage) + ++(id)strethImageWith:(NSString *)imageName; +@end diff --git a/ASHMessageTableViewDemo/category/UIImage+StrethImage.m b/ASHMessageTableViewDemo/category/UIImage+StrethImage.m new file mode 100644 index 0000000..ca90bc7 --- /dev/null +++ b/ASHMessageTableViewDemo/category/UIImage+StrethImage.m @@ -0,0 +1,21 @@ +// +// UIImage+StrethImage.m +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import "UIImage+StrethImage.h" + +@implementation UIImage (StrethImage) + ++(id)strethImageWith:(NSString *)imageName +{ + UIImage *image=[UIImage imageNamed:imageName]; + + image=[image stretchableImageWithLeftCapWidth:image.size.width*0.5 topCapHeight:image.size.height*0.5]; + + return image; +} +@end diff --git a/ASHMessageTableViewDemo/cell/.DS_Store b/ASHMessageTableViewDemo/cell/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f3b4fde089422173e920a14efb3d4e3b52c67a40 GIT binary patch literal 6148 zcmeHKL23gr43yd&0=ew5N53G@ADA=^Glnf*T$v`r2Sq5-t zQ|1fDtdoIcAQ|{!fagO&A=bdb(T)yOmI46zj5dMJT!KC&um%o}7=fs}0^L<3#ZY%g ze+j!9I5@hyXe1vRk-w7{wdk0?n7L?m%sLrJ2F48Bdb8vG|A@a#Gsz#jWGfj+2L2fX zI$J-jSJ+hCt$()1ySAV_qflr!P=P=nJp$0+IdW%%K3=H9t_BW{oQ3`74$Oyu5t3Ch IZ~+Fs0Fq;6Pyhe` literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/cell/ChartCell.h b/ASHMessageTableViewDemo/cell/ChartCell.h new file mode 100644 index 0000000..534e6ad --- /dev/null +++ b/ASHMessageTableViewDemo/cell/ChartCell.h @@ -0,0 +1,22 @@ +// +// ChartCell.h +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import +@class ChartCell; + +@protocol ChartCellDelegate + +-(void)chartCell:(ChartCell *)chartCell tapContent:(NSString *)content; + +@end + +#import "ChartCellFrame.h" +@interface ChartCell : UITableViewCell +@property (nonatomic,strong) ChartCellFrame *cellFrame; +@property (nonatomic,assign) id delegate; +@end diff --git a/ASHMessageTableViewDemo/cell/ChartCell.m b/ASHMessageTableViewDemo/cell/ChartCell.m new file mode 100644 index 0000000..4c8cdbd --- /dev/null +++ b/ASHMessageTableViewDemo/cell/ChartCell.m @@ -0,0 +1,117 @@ +// +// ChartCell.m +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import "ChartCell.h" +#import "ChartContentView.h" +@interface ChartCell() +@property (nonatomic,strong) UIImageView *icon; +@property (nonatomic,strong) ChartContentView *chartView; +@property (nonatomic,strong) ChartContentView *currentChartView; +@property (nonatomic,strong) NSString *contentStr; +@end + +@implementation ChartCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + self.icon=[[UIImageView alloc]init]; + [self.contentView addSubview:self.icon]; + self.chartView =[[ChartContentView alloc]initWithFrame:CGRectZero]; + self.chartView.delegate=self; + [self.contentView addSubview:self.chartView]; + } + return self; +} +-(void)setCellFrame:(ChartCellFrame *)cellFrame +{ + + _cellFrame=cellFrame; + + ChartMessage *chartMessage=cellFrame.chartMessage; + + self.icon.frame=cellFrame.iconRect; + self.icon.image=[UIImage imageNamed:chartMessage.icon]; + + self.chartView.chartMessage=chartMessage; + self.chartView.frame=cellFrame.chartViewRect; + [self setBackGroundImageViewImage:self.chartView from:@"chatfrom_bg_normal.png" to:@"chatto_bg_normal.png"]; + self.chartView.contentLabel.text=chartMessage.content; + +} +-(void)setBackGroundImageViewImage:(ChartContentView *)chartView from:(NSString *)from to:(NSString *)to +{ + UIImage *normal=nil ; + if(chartView.chartMessage.messageType==kMessageFrom){ + + normal = [UIImage imageNamed:from]; + normal = [normal stretchableImageWithLeftCapWidth:normal.size.width * 0.5 topCapHeight:normal.size.height * 0.7]; + + }else if(chartView.chartMessage.messageType==kMessageTo){ + + normal = [UIImage imageNamed:to]; + normal = [normal stretchableImageWithLeftCapWidth:normal.size.width * 0.5 topCapHeight:normal.size.height * 0.7]; + } + chartView.backImageView.image=normal; +} +-(void)chartContentViewLongPress:(ChartContentView *)chartView content:(NSString *)content +{ + [self becomeFirstResponder]; + UIMenuController *menu=[UIMenuController sharedMenuController]; + [menu setTargetRect:self.bounds inView:self]; + [menu setMenuVisible:YES animated:YES]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuShow:) name:UIMenuControllerWillShowMenuNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuHide:) name:UIMenuControllerWillHideMenuNotification object:nil]; + self.contentStr=content; + self.currentChartView=chartView; +} +-(void)chartContentViewTapPress:(ChartContentView *)chartView content:(NSString *)content +{ + if([self.delegate respondsToSelector:@selector(chartCell:tapContent:)]){ + + + [self.delegate chartCell:self tapContent:content]; + } +} +-(void)menuShow:(UIMenuController *)menu +{ + [self setBackGroundImageViewImage:self.currentChartView from:@"chatfrom_bg_focused.png" to:@"chatto_bg_focused.png"]; +} +-(void)menuHide:(UIMenuController *)menu +{ + [self setBackGroundImageViewImage:self.currentChartView from:@"chatfrom_bg_normal.png" to:@"chatto_bg_normal.png"]; + self.currentChartView=nil; + [self resignFirstResponder]; +} +-(BOOL)canPerformAction:(SEL)action withSender:(id)sender +{ + if(action ==@selector(copy:)){ + + return YES; + } + return [super canPerformAction:action withSender:sender]; +} + +-(void)copy:(id)sender +{ + [[UIPasteboard generalPasteboard]setString:self.contentStr]; +} +-(BOOL)canBecomeFirstResponder +{ + return YES; +} +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ASHMessageTableViewDemo/cell/ChartCellFrame.h b/ASHMessageTableViewDemo/cell/ChartCellFrame.h new file mode 100644 index 0000000..81cf869 --- /dev/null +++ b/ASHMessageTableViewDemo/cell/ChartCellFrame.h @@ -0,0 +1,16 @@ +// +// ChartCellFrame.h +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import +#import "ChartMessage.h" +@interface ChartCellFrame : NSObject +@property (nonatomic,assign) CGRect iconRect; +@property (nonatomic,assign) CGRect chartViewRect; +@property (nonatomic,strong) ChartMessage *chartMessage; +@property (nonatomic, assign) CGFloat cellHeight; //cell高度 +@end diff --git a/ASHMessageTableViewDemo/cell/ChartCellFrame.m b/ASHMessageTableViewDemo/cell/ChartCellFrame.m new file mode 100644 index 0000000..83bd372 --- /dev/null +++ b/ASHMessageTableViewDemo/cell/ChartCellFrame.m @@ -0,0 +1,45 @@ +// +// ChartCellFrame.m +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// +#define kIconMarginX 5 +#define kIconMarginY 5 + +#import "ChartCellFrame.h" + +@implementation ChartCellFrame + +-(void)setChartMessage:(ChartMessage *)chartMessage +{ + _chartMessage=chartMessage; + + CGSize winSize=[UIScreen mainScreen].bounds.size; + CGFloat iconX=kIconMarginX; + CGFloat iconY=kIconMarginY; + CGFloat iconWidth=40; + CGFloat iconHeight=40; + + if(chartMessage.messageType==kMessageFrom){ + + }else if (chartMessage.messageType==kMessageTo){ + iconX=winSize.width-kIconMarginX-iconWidth; + } + self.iconRect=CGRectMake(iconX, iconY, iconWidth, iconHeight); + + CGFloat contentX=CGRectGetMaxX(self.iconRect)+kIconMarginX; + CGFloat contentY=iconY; + NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:13]}; + CGSize contentSize=[chartMessage.content boundingRectWithSize:CGSizeMake(200, MAXFLOAT) options: NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil].size; + if(chartMessage.messageType==kMessageTo){ + + contentX=iconX-kIconMarginX-contentSize.width-iconWidth; + } + + self.chartViewRect=CGRectMake(contentX, contentY, contentSize.width+35, contentSize.height+30); + + self.cellHeight=MAX(CGRectGetMaxY(self.iconRect), CGRectGetMaxY(self.chartViewRect))+kIconMarginX; +} +@end diff --git a/ASHMessageTableViewDemo/images/chat_bg_default.jpg b/ASHMessageTableViewDemo/images/chat_bg_default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b1675a89e2b80ab218f4ca8aa3867975f42c81d GIT binary patch literal 39248 zcmeFX2UJsC*Di`Ef`uxG(nA%bNE2yBLJ3GwiXupPX@WF0bP%G_K}rBYK#(SgC{3H4Kl|+$*>d>LXhYwR7IYLEGb(D(!1RWI>-3b;3hT{wjEG)-Qfa^F5 zGdqkE#?H*oFDS^*F9luaeqE4}ebiJ`w6wI0baaf2$LNnSvYrGND=#Z68!IcX5H|<7 zxP|yn^YZeZ<`)$e5)u_XckT}p=g$4CA)%!>aGUhr{(ZD0q_q3?)9(9OOL80!mE_NB z9~t1&g9-fO`uTB~qq%`|!NJ#eepMr+{!T$q*LPVyJ(nAcyy?uuv4j2FgbkSts zB}phQBktiD{;&%q_fqgAp!P0`%S7srPslQK?TPK%cLCppJdoij&=A}K!k>hI;J>g0 zp@gozPoh~8fQc}$hYX;{_etsfiL!+8f7KE#;Q@jU9sy|f9VS}-SDFx?sJ$mcfDZze zvd8%K@uxB1iZ~r2T%z1wm_QdO5RCip`S>-#2ly=EMWBRG=#WNckU_W+59se@;Aen{ zr1$4I1;My*nL>x2l%6JqCW9n}2GaEBAcF=VMUu-DP=bMFnCfAWBI0Zy6rdb_XANYF zWUqSxatXy8c*6&uloSwq;O?b>6heIxl6!k0Jivb#NJ0StCIAdTfXVH<0DTagK+yLJ z?T@Vei3N%T9y?G02L6mC-ps#lh;jbk%7&n_@9-XQq8xzof4m6rf2Vy<{#V*)Kmed? zZ$7`E?m>ofNl>})_p+rSy@%KPqoVd)kr1H~KmP&YZ*jugAY=#F`vnfb!_z>O2n^H( zKmgf9v>0Ux|exb>UBCq89=WiqoH?|BC*X zT7NGnAO=khgex)yPk`iHfY#R^cK_k=CdFAiVdWG(zbERggiFg4f#Hhya(cBjM9c0_{VP zDM%Q9;X^~@0S;h;Ws9Hk|LiePg#J;I|G(U0pdtYCB@^Rf8QWLKnRiey+MF_`1>yO=aL16KzN8&39f%Vq=}Iu zY}kMJ{0B*#GQS>@ zc@HYF0Dw0BTts~K{r2!*Q@{36!Z5y0|7*$r2A7CwPX&)1PyZS110*Sg@!wO2j^=;k z;XA+@A<6!~4)c3b|IH5~ti44=*nFT40l_bDd)^4Kheioihd)N_Aw=9mM3R8x1N0EN zM|$rM0>T8HPVrBEeEBLI21^j=0V@Cj{_Fv2Lx=v?>EaLbKp99vNr6BRvvB}q9I)}L zfdGz_6aavpOMCF~Qv-$hfN-1zrG^Iz7LNkHB7e_~xP|O(3(%=`@7k*ye62#PKf;7J zMwBClk=Xx#@JX2Qzg7H)C&JW0Xvhef0M)&eU-191_PeP6zIzZd{#%e}@E3=`AgTk? zew%v_N_uZkxKd2AQa*F*q*lotQ4d*0J$8c> z*R&Z2p4#cTs>jj$)Ny#VsPJP|Ote`qkJYh9Q^9$5U%|f&&$E3w(;MLk5A@qb@wZ^? zOb{n&-YugmI2>&*=Do?O}@Q6%cZ~e<|m0=d+8diO@;dlGaCw)Kjx8~?ta2v zMgQFlmYxiT3!pA{0T=>=fgseX@x-d}5crU=0bvN= zf-aUw{H87OTHM8e18!is58o1KEMNjhco~8zEWrz2n81Mq@LfoFj}N&9IEnlMh_KoN z1JOhkg1|3Hhyb?`P=qXC0c{zjW)J8B$k#u#0O#*F7V6?%LoI=TW(33xh+RDWOA*A1 zNE6ZS*|a3`fdGDJFT6xCEK$IK2jn8Q5n#5A!dewzfg{0U1AEACAIODefx1wEIuPcG z?c**0rVJdSt^-KGj#UAq0%&ks0#3o7n7dWBkHwFwSwf@OKeE4G72J~y8z$fwE!P70^N{JaPMhBafZ5t77%zbEW|0m^Fb&e*Xle( zMWI*#143fCml`09mj^8vDuC=;LN>8@06-Gr2*yGNtpLAZFO2w6;0~Gv-h#R%L}Pgh z00DvkrJFkz1P7=C4zPm-l019Dgn)oqfKe=-sfHgVh+zq{6D$VqApTwp=>maYbH@+i z4HD!n3HFN#_`$@19SA(({^jKt=MMrh3vQwegnVxlPvGt2O%(t>){AJM;>950SbSRdx&RLrq|7o33+=1LP~PpKg#)?Cd5C^Yr8T)^E?Sn)E7x>!1dx4(d01_53@veWtZY1ViotrQb zkaq}bBfcfjYTU*D*oxIHft^^uCkTM5>m%3!d`Ja2G&TgxB30vWEf)JzsdB zC58p|1q&L1B;>c)06dRC96*-`EbRioG=MNf0j7af0mLWZ;fCa)o9K}cOf1BKW&{XA zT>;}jy$=#AAgDkx;09hGB36xuz>ocdNf?U4yCaH04-2AAK;T_K=O2O{OS~8n4Dg6I z{=3}^BM}2sR6r3wQvz}zkJkb)3JAJT1_`%N)K`dz#S-k>gJOoz8h~dyfkO}@7=&u9 z088M2mH-dnBycQ=Hh&2~1Tp(~CQ-M5pn``{u;=KPJG@zt8X&9=n0T{T?t;CD2}U(K z0Cliw7em%8W3M{^FVGEkV`vso1%ko=sPF-_ECxpUEQ{5^jDY1|)*#&|bRyEb*uWfpMS+rd9xX1T@qwAP{|ot`(8b1M#tYDF95+h18+^ z?kPe?G9Z9wLZ|=$Xb5TxKo>7ofN$}D30iyne{z0h7C)lKLUWT3VH8pYqg%@X4FYZjISz+Z4N)`dwuV*L$6%gZwQic6_(v38oB7X%#o3SU~fj)Y4C8WY)jRF{98uCEF*NqDm#o zMcYfdcDyNUbV?_;9Tv=Jm#QCla0wQAZ$iQJu{r#?vu`S6HGOvIJd*s_Cz)QfqkI?} z>Rv=QxmK;<0@vrLbLV>7T{z}lI7(I)X|rBw9?KK3K}w;<89GTD7QMoK>PnQ7Scc)( zD0UMhn<>ndzf4^jsV)yPAC`{PpEwaQ&B`&Qyr3*#zKyA_T?{W~|B7*yaLe#>+@EEB zM2E-Joo?viw|#R-^ri{a#|nE!@WFr| zTt#yj>-?iO(=Xr|BMfe`+w}pWNfN!!Qoo%@`peCS0;zb!VoI%COb&CgZecNkhRY2j zbcxCq;k?V3J<|3tXVXP;x9cIh`MWBl*^kHTo%`m@j-8T2RtjW@8=&lXT)3Dtjm(jJ zD8p@8=?h=(+G-0du}?(?TslHM%7}D1ZGHW4?99x@TD@;^23M+o{tEZtNjBAI78~w$ zL9}J{u~~tVFd3iFu7xR;D?6nLxM>yY{2^2FWJ)GBmM%Z%+q7afHXUQIRQ-Fn?1525 znNZiqxzG9~nmJV?$6homd&m#sGXYiGj93fT;D^@Ddzk-=k3eqT&s$u(y*hc?2~tPWOE{O_yx5` z^`9!Un^Qk{G}l1=J&{pNr0*O2ggXjb+^l!qNGD!gzQ|H zozAe&V_@4%wil>8#KRgHTJlvZo~e3FMJtxUa+i9J>c{(F-)j-eZt>xcZ!qIsQPDmJ z)3dY0hJ7znJyk$V${z|!cork=g{-QybV%ZDTR~p9h398C7t?Sk)>-B}<%4`QL3_M%7 zw&0eYa+Cu7b*oDK3zsH@<7myI-`~t08VJI;Hib#cF>wtS2HY0dPG!mZ!KH65>sjv; zW-IizWY}4Ll(^`M{F0N~~X34A7(1y9UOP)|hhdUbKehpz7%r4-{u!(^0brhu^x& zo=y$h7(-5z@gsFyKC)`?rtiodM~DTx<=+wVjb}-!ihG{pE_dKZL_xDXpE63}4Nr(Z zYz~viMmZ+@)bDV2A?J?-YSbNXT8gnNo3L~6>K!GPFiVv&eQR!?3zw=jAiEDsPbEMgR7Z8s`s+IQRnM%Bx{7U$iBX8 z!ngm4sS-k(!ADh#dI3#K&KYgsDVg|E_0?_mYA3xZcNe~n}#J21zLZ&3^I zfCXnd>BwHAXhzx{Dc`2h;>-v=&P@f=H+1Riv`)0_6sOzX#Q1%jv$*0>TOi1KIT`JO zILMHQA&(6>DT5j69Zw2seivb%rdneqIKH28OzG}VlGCc!7yL`3!`0v8n5)}VClt+4 z8b-*4L25DKFA4IO(SB*ucJJ2Sl~mLsq|2ziDarGh%OcrpWNtk!b%sSNNXC*0F7hRU zeapfy+MuW)SVzj^eb7&mBW5k;9T7Sna*?ySb>DO@FK0WojWi#%-4JaZT2k}Hl6{fW zH#;uXI6$FD9*LuOeb(J#r-8L;O5TUdVgkWY0TC6A^EC?cxS^SAJrkWX+3tEs~fd=B1wB#K5u8? z7M+OiDTeq{k_Jg< zHsD!L<-=IhTt`2|Du165%PSe6nh%Bjh&dy*BRKLH?5?U~DjkzDp=JH^V?p+-O%9Zk zEf!nyuekJ6lIR}_E95=8Mm-%4M@~64MQC{+ksBW0Z`O(}?#I-6S#rK;^BGl4Pr&3% z8EJ{U>k+oHR&tJ9$5N(^i;U$hgkP?rIUZ%hryp#cffS)R#wk2zz0Yy!KG_Gfk}0Y1 zbvu+-`OzW7nUaH*SHRQr+%9`+tC+m>ir}(u3}qmk_bUoXI~N&}qp%%3(yUq*ccty) zyQKE6(#DgMk50k;jIkr{@;U^O+ZZFZi}Fjdr5tNALw*d#3ktGd#ZPv(@V1Iqm9Oy6 zk9jUB@0=-Sia?1xJ}y_vI-og-fFqIjA~fM~d4-G}>kIK?us(;=s(7HGd`Ev>GZZyCLCaZhIHLaSHAkuu3~-ntdg=8;hLK6J$_CyLD| z5+&w0sJQY%+M~_k;?CkRc4;{I_q;NzJOTChc=2S?UL0882xbJ~!&#QYwH-rZ2dFNGf>l_6=78Ahflp}gxVR66a zF150pG)5zBQR3@LAFx`A@d;^W^E1;oZ+Z*6)luO2xJJ0%cBMXqQ-NFgOM~;>h`tk} zif2nArdD;$Xqbh@ zA8BO2EO9e7{VO+n$2H9f<*!_p?)Hs9mC=sB zeF<)95q$K^1U$W4(>Ss{_eR+^%+fuPrp4|l1>%n9g#vlKuPZg@#ov|AYtXa;r<5W zc&r#^$*D-)-=)^`r1ynoxW&$C{nUX?3F8f!>iVTA+s<=L{N?)lZtT#w<{$B~&Q5=~ zUgE|Q!D;YnR>!XDgXS*1&*hsd7ca&xr>qF+>nVQRelg}g$(8>+G=Cr6&|B3uG)?!j z2r6r5o+C^WMUAJs{zD%!5hGc5=XKs~N_bMHtW`Ar<-xnj*%#StzQ9}(esMZb-@kd> z|84MOD3iPn9kb56#%M(rF8d%0iV9`q?82DMtcpuSc?y!Mvg%cKXr`sqYDn!f3OM4% zP}^i=k~{yy66U9iZzN}GU^%aUlBiC0p2h^spWbmA?ydgJ$-Ip{Dm)ACm^-hz>PxbBQgjdhd+SS{a`|j;@4wO*{DRTI8PJ3uo=@L$dn+oDlGj1o z{MQuc_+}a=Om_1p$sz0K!BRcGaipJe4=i~^ma}}`WPA7B^6XAiJG=HSd$-^#bOLOD z`g_0FO?Q|zs?GN$g|m~5nHowyXayzeQc@gvXXng)mP{9S*qe7a2gZ2v8n#=J!RN}d zj~Ff01w~?eFLo~6!#%d1u6w}D{uGV*B<9TCzN^#lc{7bhMvg-5R@{T*ZbB3??*ox% z1L)(pdLxirjMsmXaP{Voumn}=ePF+lE$B_}{*%NZH2%uR35%!Yw1+FZ8Kxb!tEs{f zgX|QB;oLAk|Ss304L#xIM#(%_L-azwaz)?zc)?B_-I53)}tDsrBL|u*|1|lw(>=C(uZy`)ZD%Hkh|i*v;LU=`S75# z8GMqrgLw(_lVdGn?}mAlyq}*g`n9fy+W<T4+!SK|U1>ESEYzwYL)BEApr986P%C9MJ&hz=W z$Vr1OzsFj?ntWzc-rI`uX*N_gi&qv$@P0t&&_v(T-`R?(VX8 zEaeun(+k*G$b~5+CpQPAKbTKzzrz?AH&lN6%4L%t74xE6PT8pmtvO6!S|w-*|~P})uEHa?&-IXb;`YJsk0+CkU}$GLL6L?-Alr&`l| zu74z&Rx?>u!RK({i}G+>5nJC8*T6v2N!{#2GR&1})uRgRA#IuPbh~4P*)Pw^VQl4> zbv%!pX0Fqr+6-Bh@TBuN!uqaWDH>BXpU=5LTf!eP!eXjhmRinAEoW3fJ<4B*r4XsU z>Y|Ss>Pi0!b8K6f*_n2M@hQ4>U6WJgS~R4;h)XPg;VLS^Z5LZ|5k0RP7kci_UX=8pL5}dkG4E&LnLi#p-{u&o zmx?-bi&}&)tt@vzN5E3d1Cs}T=#p?nnPsT zYYJtNx47>hU4+XX-Bql1k1@z8Ax|3R9CTeousgTSO`-LMru!fA7IN=gdyiJ`5tyX5 z*veegLg|P`w|(4T??k#MR;X&Ovu#eRxo`zgsbMsY&ofv2rC@?YyEbLYj;GOv9X~az zYb5awSBqA!f;XmDK07ujmHN_T|Asm#cTQ;h+x|zCJqrsqtJ*(a-VHrnPM+^pG8r0q zmwNao2|QvrzTLecMqoPy7pYnQJ}P|*$=&X*z01FXj^@!HtDt?q*pgASp8AljgS|K6 zyW8ZZvs+i1*QXW9(D&#=e<8*dADz$Wwjgsw!{Axs0U?AdBwY__bAIGMMFL*^! zx6(bO&Q=-oa&U<)%?-tT?I#I?j7VZ8*^BQ8>h^5p-~sczY)jQ8`GPAl$wE_ajb$E{ zq;DvnMJe7a$*YMDW-)!@Ur=>}H&5prav^mr`I6}F{c_jYs=6)Yi+5RzF0QbGMT^Gd zOndPqKN0XtuP%e>>8fTEKeLFr(45ts`S6SWkNU`u-0<^ENL+2GQ6x8;y*d#wLf?m_ z%$%q?ti^rD2X(w*_i;jn>Ii#HV3dbk-P*y$uLY05+oq!t&vA*k-sOl4u0HIczuE@1 zGU?pT)CZg{m!r=qVCp_oY~^7>^N>p_*vjsa(ya87hd_LJU4E)t*X$HhDvf&N>*qyO za0hh>oB#88k*N5gekE;_q>I+eJUYD3R~bz^_1#&M56+LmmC0r&w|ADNZk-o2^KA;( zZ7ORsS}Zo;q(~pi_DFMjLY~c{2mTrh=j^GsmL(2S>&IJPlUhQU#r{7JjD z$_(GTGSOmJIBg@eU3Mki?o}{iWe&+mmPQO$)vdHRqa>3vL_H~XeVDk~(0aLkcd}2| zH8(WS-#Kl7=^hTCbA>I>){nE71V{Hqk5F!-;Q5ky2SzO1oMmHDo%0xJ8TTVC6)jG1 zC-2|lRNg%EvV>WIy@>zelR9CV!MjY7C4S$ra5QqmO(fWGWRmpG^2Q}Md9~>Yq;>E> zTh4;t+0`z!fd*cYG-jNo%B58DA6#`@U-ug>XdRbwQ!Kg2cyaL#?QIEHrL&?B)P~_{ z+@{fo8!>Naw{;%l!p0;wZi*OW=X5=&)ci?eAMlf;oc;x_H~oG0WH_DV zl}{)h$dZPUwP^V*-h84u;b+BIwM6YFnov%bKApKMo{tQ-Rb2U+m5wcIARC?IWObiH z)QT=XYW}w4y8^FyTG5qTc^Q3pgt2#FLd5#qu-j@BL()aF=QvOW6&#A`pAMYy?Fzhg zcH`EL)7V8t@+;C+N{He$#HCzox8N5{WqSIztk|TpsXHB$BY1zDVhnu~b9RGhke#{N;ehFi&RV5YMb5@^8MPz(##!XS$?S|%*n}l^ zJ$M#={-Xwr5!0sszEbqkaSr)q?v2P@+Qh7aywap6Mju<+WJUa57k1X%uwT~R<=&L} zx^ibkgS+bS3#RlIa9-o6s;ED&q-3z3|In-|CODkx!&hCF{J{2Ep`8dvzvjDUY&91EwuqFX9M+dlm4d!Bm)8sWU=j#6V* z)|wu3mDR`yysY1lObjVKpxe^;tYZXSl|>d#JlhwezSEa_QhB6rZmK za;3tfB5Zu(<6vmKbt>G@f_9f7i>q7EP}CXbXQIrTeRO2lfhu^);S2+t=i}1e@S88i z@)_-no}KogGHOE$nla368OyqJp}$h!8k-)8Esd~yJiN?w3H-%0HK=vb@u?X5cSAMl zmb6cg)-6nGSp!$~!mE^fsQ2yaNOfv-b(-O_9TO(^8Hwk!{3LO_o?IVLV0tj5#QV&L z`5UkG?`N6NSuxDS<=515PdhH-lyeaS#*JCG4&2%{o7+h;68o$@=fuKhp|;Lw?9GhD zYIaU2?w(fTlkU3KQ8{bZ>zl7Xpc?ApVI%F{6>jVM^?}eUbXafLpsLDoBtpEk$JYJB z!pFA7Kv7+vk_jZeS29Z|Qd3M+tz}Y`QnD%8TaFvsZT8l(H1Y`xg$wUeN!H!k!mpfD zb7OwPkDOBVO)|sV_@9LLZ8Ho`JaUooG72nK5xrfaj~!_XcMvZPcBl-A=*4*SQOmKR z+{32IWi|x!xaCSByDzp4`B1zW{{CHD)TM>Yi64(+ zy)2Dc%OjuA$Z4$6Gxgcvj5NtVtZX+NUd_PzTG*kfhre1u)!)(79*W|)Qtd7y&B z`kVFF#aO|HCdtShoe*Iki>{x|4T#XA{eHJLs)Ol<_L{ORC0f%uM(j*Zy%(iK8*)w! zt`c4={`^a1UyG_mTsbX$cdm`mL(}NGvvM*pTTfP*7ui*lh|B4n$I#6O4AgBxR@q9g zEvb`R6wSG?e-|(N^y!WJ5%S@H!8g*d#OsW=+q5cQf697tk$NF~dKhz7SzjlQIo03f zvTOzAXt||;%Ng$o7TU0(sJUt6WYOdGR$7Y~C$>JtO{%o;jT9yh~jLhz;UX#16BITq0Hk&=U$6`oMIb6HR%ZhqTrZR(( zwWuw67<{?$Ve1B;8|R_Kdc78{7rt9BIO~w&@A6jsN4zX=O5I2HUrEfhMXon6%LenS z&j*BV_xO8kTspy*OJPX$Leu883oN?AU*pPD#v2zIVZ$34h8u|94MpV8rp(5|1C7uL zZq`CYH;XIb$uwS8xu4kN^OozRQyCZ9O~}I?CA+Q{)rU7Amo~G@8{||^H+dccz_&2gtbBqf0O!8Ahc&*m~H$Jnj&f_)ndnechO~J;$d)M<_;u(?0fO z#SLwhlyv zla;C=^0Q_J=Z>gVP|htZe?xstS-h609(6)K$h_?4>>J}B**Qij%H@Y|EV7jMSQyIczl1Hu(~66$H|>5oAGY*x7kculq#E17~KIzCMPfYPi(u?_M=EX?~7A2 z;wCr&SsT|C?#f~R7O%0O^ubRI(f8gYwhazZpO+Feq-F?yQv&nt4LDt#+^9Ubl~B|` zR(QMZnMLdXQjqRDovcjolZjE&Pgeb6!3X0lkq)Sag0uR;`u(|aO@-~`#fC|7$IwkM zC+0=3#7>#a%qS0P)WYuTUD#tK-z9xUj8K1M?vpXCin++xJU?OMnxU4bb=ePTT|UFC zw6g4=7i2k<&@za{a`o_2)fau(td-<`e&ugePtB359C= z7G1*%^?Ms?U&HsrDXi^ zkyV_)O{7@V%_sD}V`y~5$P?p8wQn09qMwg`oSw4HK*i;x9=r850<9z>buUMTuQ9UW zS{Y?FRj#t&0w;pr=E4`Ih5WNzd|mBunXn8^<0Ae*opUZM1#CSfN3Z($_i25(bI0mx z;CV_NYC4e#CDAi589C9jA@tQ_4(uL!*XC_Lx98oGq4%Lk^y&B7f_apa8ML1_3efr3 z>!9j_;XyZN1H(bK-K*Yk~xgRX_H=^fZuKKP1Y?@wwlRH zD$zKhiDlWmlL-!6U}i>g)T7jnMKn3H9w@fW_h?O(ws5U_3n`0Roh->pOWw+|IoXU( zC*l6U&Zt|}%-%*7#x!az?9Wmqa$|)|6~Bz`oI{<3kq^)#XMH!Wm4R=@RA--n zFFhY1IrEM-esH{^iu*Ej_^)MJ#)FTZG_=r7w(Ey0?ub5X`9Uk@S0cn1w{+a&3Da6r zSlCYzGL0MIFW{Zw+n5G+@6Vvh34iRl2M`6vU zlh<&lgLf!HG_9Ok*pi*Mof*MgUKN@W-Ha>>vKZ_;!U8LMj)6t@n5S2~^pH5~@%+mp zjorao_G&TDpCpXu^VlbE>7VgCqB$mV$qmLBZgnfKJop=Vnb=el>Y?vQdzEbW`-w3!B_e;wfvKkDq7TZZuVQbw3NM z64lf+dFJd+tx1#qe$dg+3W+k5zr?jodMH?MedIio+UT;dK7PDfysG0Rh8G@iQ)xH_e5E#d; z!1W~Q5}&2hG47m%7{-#fM!E7iI<(5GqeqC^Xp0$wW;lhyTi6o zdBYJ#)9_3woVuweW_Q>q>e4aQuPZrAf-94(ML20o&MJ#F_sLUZ@`rM%MSsK(jDq(C zdb3mf7W%_0Rm%pGq#sMa$EI;VMG24HmSvJyQS@?^iq+AHR$Y~n4|MN*CP}H-C|=#E)Ms1&&%Dhn zb1Ts9a%p)mg`qWAsikF}Ki>swo6~i2|J8S#u)Z-7-vk{>YQwmPqYu zQ+iOGzGWtrdIV>5^I84f&tfNwTBMogZR})+PO~OkN2h1Duq>4OM#eGnSB-qrbRKcH+Y%ea%j&!P zD4E7waSC^CT7mD^*W{!_V=R&bu*-d)bIJANt)k3U{Ad=p5vq#~2alLsczw;xP ztlVAKIt7=get!r2_N+PY)y14wVdj;yx1=~F>IRxit+PMRg=(6Rw#*A+5+XI&-U>c_ zuEr+Ks6Q3|#`rJ!X3kts>S3H7Ix~0i><@6v)7LFF!5r)gMBcxcr$sY2b3j&v?3=J= z`qTY!6fS&v(~GnM%MG6pTve$YrB0Y<(p^r&uad3UdB3wAGB5ac>OxPs*)e@5wK#*) zBgi%f3fsk!p}xL$imHG|`Vz9Gtl=t;hP%S4hj%5IyiC($JvywNm)=z$IcK#WX>Mo0 z#MMkLN_VaNs8KWwhe0csy^BqKW2|X=Q_F>A4m!OhACTPTwF)B-52!I1B(o0jsQ(dIjeBH}!TOiL zc`f+kN?+S+s0E$ykE&_y*}hYLOFQoa2V@eJC*Z-43!~o1mV#GClo?|JYAYN@XssWl zXJChPdvV~U5<_*H7p463^=Sk(E2Upy`QcXjWy}z@@2)_hs?2-6yHC)f-UqwF_xC%H zp^v1O#vsM7mVmGA(lAYFA7~{E&ShteOddcK*>x@3H&;2TTt&f-{-t~PTx}+;%Q0j& z#rf8hlEW+PoeJ|F&T@|@p2gm5ZZH^D=DO6#mx}8j6qr_<#FDnTvJZEDsV{7&_tm!Y z?ck(|`L^Dcr_S0~R^OFg)4*vNKBXeXh6}q&yL3qMB)^iy14>pPz5Y3uRrTJXyf_FC{m z*F$fpu;_922Oj7B#N7}waSsC*91dUkYleprVsvv&lqEw9vfm`^S9 zXYm%zrkf(e#kk+a-ER6~v_&h`IvV+OaN>s~*XK}*D*4(UEm?u$9}*IprZ+ft(R_J% zmK5XKHd{0^BVv+KP6>%FOMbE6?PulRH1$nnfNv$b)PGQuI|>FSOG>yZez-SYeXtxH zsLe3oHd2ED&1Ws>T9XH#`LvH6P?JvTZu^hEjjLO6Fn4v4 z45*6|LRQ*dQn0dcpH>(WHOY)XT!LA=JxLLTlG^RzHYJtf5#8Ymopy7U@=cu#jaArD zKI;J^+Yo4Zu_U|I7 z3s=}JnM)2XA?e+8W=iyH)4Qc&vqj>b&K5T;T z1)g>u97agG>LM+5@?L+Tsb-j@IDw?HKewR55SOGEsBhHBbGREVE(;6WXw{L80LKaH z?`6X;&euz!D96H2%|H8$$_sKAp$i3H*DseVU2hpYr8u9!T0uRXxO*Mr*JJrK^aS-( z=|`gx@H6f~{+5d>VxA|e_HThr%q{y+<+mYuHQ|ig)mSn9oU9LSFDXvfL$5IE?!G~Y zrhQ}$u?vX%kG_Y)Sh?L>6JD2FL{Z=0VV_*wIVK}=QpexanZ4ss$q70=Z;G)5k;Cw3 z=OdOZU+l!Conw>kimhA`_5Gr_O}i_+^OHn4d@JUX`(Qx6JN1YlMO3cvjUkkt)b$V5 z>D|c6{H4naQ)(MR5hvUH*m)LE?6r?^2^EJdK6gAy98~Pmnpd=AAI(x;c79)Ed`e+U z^3?YGhgVhwgV~V97qfIfRve$n(s?U^rpRnjb&!(W(7D4Ex*S=oKU>>9jikWQ%SB@+ z;IE~^2jVuspFXSl^f=+%+OsBt9!_1&0X~=ghgHsahRPf3Z|1Z;6y42t@u^B`$6hWd z;~24Ti_it{cCV@aH7g&|-@e0{C=Gkl|9M2MHe93y(PvtCOh222Yvc0LCBDbF_k*&o zI(c_mt1+wWo#?M@cUJtoq+xB?>gg`Dop*1%c5Q0it&o7uAc zvA^*BKtFOSrQ*p?5_GaL<>beQXFMPa@<+7AOnJns-UX#q$i%cxT+Gnao))gk%w1qi+vHQ=Q+cbs z!?=NqZwXf^>U}>;yiPFavMRZdTc72Kyy79{aiQEeLott);#$CYv66Chq)*_6?t1B?&kfWgMx5JhEFWhl zS*UOYh{9|QN%n5`PPYsSXZQC3G@g-j6GN0gNy6_2tNt~eB{davb+BG-wP}7)Qc>SF zWNtRSP7=1|(AhpVFiyJYilHiZhMAw(XqZ^UDQvNiTpFC#H$7#4HJeef?!IY}_Ezt! zA2rN!k$vN+lWJQ1CWY+X^#x^&e*J-)PHM1ndE4u3GJ1M%lF4l%%dqeyvri>K(N%19 zMksAY7iUrL13gDRDcde7o&CP!yQCMi-H5X~$yZ1Fk%PDJerSdF{%& zZei%-k}u>|3$e#N-8Gt%ZQ&VD`L6qf%klfgEi)+Ud32$*#u(R2$m@eb&##F-lv=`w zR`+_@TEw2&lJ~E|%(W#Mk$Il50;zV>RcQ-*wllOgCXS|{&mUR4azpyCe4rr>JHD^#T$PC&?Z>Y3TSFX28M?oL6gCFBeK>9a$FpFS;ia#ANDw*or6 zgLX%ca~I7jZyn2dj>$anE@F(5J7drz;=5pWJHhQUM#z=)c|~5oK?D8(WZ=1o>yc;*!}HC%v-Y=G#W*&*(9a$CdLss5 z=ISQ3rl~Te!AxeMLAVPYxk?K+gK%+qQu*cOy=CoAf-8J88s_k{H)Ed9LREzQ&V<%y zbiE`*-nY?rlY5vl?_2_3exxvqqne+$3yl7kn zwzFv+^MuGnm@v(ky>2TP)cmSHJs>ZepZwwf=U@HtV+c4k80)@Ql;(Fmsx7@O~z zD*V#@-}hyfM7L)7#ml@rI~%8S%=i9(=c_mH^-*)Co3_x~cI|CC5n0%zZ_6dx3dTTF zvPWZqabir_hRi>zk3V6R=e;3Z@;>KNgRMbtPi|VS14<*ZdJWc<*f5c_OxJ23n*KKG z*n=xA{>GjOvKKN@vevWuUI|yazR#i9`c8bT88_uk%e|#^Eamxbv=4bnpX%I`b6nk{ z7cMqd@xGbMT5?8u%_>S<5eby1G!8m%ZeN&Js3V(>8L1CQek*IWl6DO($tY;_SuA9` z{+jjY-jX(TdDZ^vHIB`am*=UDH={Mg*K|}ooOUuzDS3SdYx=*qBOBuME0IV{S$zY= z^1XF_p6K`BZycqhlu?_il9TPjI)e|bOhnIM9-3_leO{|I<@z$3o5#)GtlY>b*_2kf zbo}J%ny@ontB%we@1XOJcGSN9g{GZHcVjTgMn6gTneNuuYsBb(@dq?QpP(z~Jth1Y(G_`$-#I{VL-78$AfAapJlq3qdTz7s6 z_K(^>+8mW+UD>-}@vmrW_HXV#d?BGLIm1=%I(8IiZm=Td!Bloqaas4)UwoD zxF73FcpTrMGS--6dFigg09!@U-X(QMO@YT-O#vuQ@J~%>%3d#db_Qf zgY0b{VAqeKWFzc9nNSTbA^Zi}ma7H0S2=cI?ZXO784>Ra)urE~cG$ioNR<4?PUs>O zU>`7jqnTmeOwH1tIai!%`M5hZ>Roi+BtA*i?qp6-+YnfU_0G=hzZklmdDueuNm6%L z&aCm2+Js5+YfPHM-EP%exqQg`Jc9{{JBFn zBMaUZHfH<20#AAC8PU1w&nT)srCVZHX0Q7%cjN24QNc%9L)u@(=vN=@7^1MBg1<14 zcWUbHfB4i)Cg)YFoYDN0&1b~p6&(DSJplyTOxK|4py}2mTOBF1dlYRPylkV#eX&Jh96z&6aNZqPwX%8Z9qocAizx6gK(Y zcqM-Pd#AXXOtMkE+a0zS%8PW1andI&7ht|U{^d8gI<e1;|5s(_-Pcswef^mc1*C%%DZvnm zbZH_bMiMZg4^28KMVf*HkSZBkC;>u1dQrN7f)q=r(nALUDbhO;>79^y&ix9W`MrU& z|2Us>oxRsy>w8@dOpd7Zfb?aYYYyUjbKNYH~U{ETHRGy=cgc# zzJf=;GfDXeawbc4kSPq=8p2fWytCDO+}>Y?Y6MVM#aWs8l;Kc#J69G*1vV&m7TID{ z$7Mme_1hORkyoS;2(B2zny&mhQGyWpy@4bN@;+1tGYi;NkG8Qq@(X1aYYdw~lM@ zN{CT&H%>+>-K_|#n|W*dcuQm7HN{8bV?HIFNs*1-fZS02K z7`I1D{@P^R?D0~+(Yg-AY~eZdoYQ9RX)WM$RAGJn_#A(TLADsK zh~oYF_XexwvOGGNF@&6z9JU_Sec^dWx5n$U4y^uJnPxl$-$5`EYm$Ewwp^yj@BNXfP_E$|g{!Ty*A zp5`KXWJZ>{gTHS+GEp;#n62r?cp$h~VUvpTT^EsBE@PVes|f^$IT_SSb7%5r9|L#K-3DvR^a)7UJz!4WuJ7&~E zqm2e+l?O`-EPJ$If-o)a@wdb?vuEWr;N3JE7Nx6O+^~dYm;p4;9@q7vj;TekS@r92m7nmXZT}o+Te6 zBI(pWsbg*(7=QRyf~_+04a@}(A}C46LniuohFnzF<{(nngD|2fI7UbiT_fT{9FUc~ zK_EsWIwX5U0Ub*ktSl70@?rE%>$^)JG_yP&FHBrP+m_-^S&N!0i4z|bL(_cG?=|NVnt+1~AJY>AjN;`kEP zk+@wREyMPoDuEO?H0G~{3CxK(o6|_02yRf{y`#RK81!J5dlg;W0<0x#50M{g>M@eE zEqgtr@xp#B^4^{PsI}EA_5;y}2ZNBP+A)kNR))K}py1aEMjzDC67coiL}#D#G&x{h z$%d|3H(6pM!u93&Smav0M<7URbLUUC#ypyu#@9gp;dZ3ZUfW;4l)-&%ywC)9=+<+) zUr#DCh1jNs)5JLp*S6cnPi4(xj!A7^!gok7J_q5+Nu6!Sil(+9_|3w}^c`+a-c#bU z23te^wTdwA9<-J%>vQI5z#=%I?o)%u>1?QstZxO4Y{A+6~?-|_KJZZLH9v3U+uqU`A zkRE`mdZCR@XQO-)}fByYLUzq&vCEAqh-atVA{DH;5!#Bw0 z;yZwvmsGVWP@{a=6wkQ@W$#6n(uVy`rVms{d8Joh#;y+ksQi1#B=GU2K;2Ln(CKD} z+LT2RAw(O8T{&N(d7_h7S%vYSO2^L=CBRrIpGACtDM|J-Ra22*;D6fq)a&g1(?Y|- zdE<=G$$FCcVd4}Yb*}6BF(}p{GrYDkOcAoxwhV8jbXCjrG&Ch^}thQwTEejYZ<)V$5CXkwD= z{P&NH_I+g%rpWP8Chrpi(}*udI}SWcd*UueZf|N>X5+=x?^|G^<1nDfYQO%Jp(~Gy;|1j5EHU`S1Q_j^x351nQ0@NOeDR)ND$RiHhMS!%rAv^| zjJSmG){#c9ql*OU6YjHObcBnfZIS2j(H0S%vFET@RQq9L8tqdBxF~|_qeU1PGNB)nIK zxT@lJ_A1lBQRwqxXHC9pTi8e2Q$=K4*{oTs4(wXNbj}QhQM9sa)Q4MpzMp=JtVE%{ zw4*&75qgw5;{`Eyf}0te#eR^|P!3pw{Y=LZY5SR&J9m8%oICj}Sx*boBiww3D>?jb zU*z!**FAN=ObbrJZR^Jl53I`%suag9kH%tdKUWZWSR~65C=xBgVc6f9I+1`vX52^_ z-rAGY*;Xc0)PN<*BszYi-O6tC5&YfPITNvVE!yE!6&!am96g|5)YlpXL+9H*Unq_~ zf!A~nojHe&B^0gx#S*R(YKuJFRXT-!5>92hl<0^yzyOA>Ojc@v+fljgb`N~p&d(%$(bA}$$Xt-v|z|+L%WaN z5t8p4PAQoi+Zl4Zex#KB?(2Hbtj$|k3^Z}jJ-~-5Y*@{o|4LSVP}#)19Aq<`H|Q&s zcnB;!>n}`di)q!B!xHWAGPg^T!7iB<*1&EmxRv8fyX^M;B45q5t^~#YqPY%ei)N2n zprybp-8y$Tz1s_5De(=^o&Ab%9pjVn+ba1ia6o~6)ng^Oi-u(hxu1~UkQd$k{ zYT4w1SpP!}HPv#AU@N=A3o?Q;C<$dC`zJ*s7{euC!-{35xszFF!}_Dxb-Q?BUk$$- zx3wmcI~FHo_(jMn(cS12;i{S)x@O3|ftB_CJ%+jUa3lctw2A5IMnn)NU&o$z9k=0J z%is>@F!`PTg!*f9An+6kD6^?un)gHaGN^>eywWF^ivA|%yCWMwPV^Nj5#%fJy?uq^MW;HhPb zcTPn=n?tmrxYreO30P0Z9!$7u_p^i?zZwEI_1As2Ex8!Z^E@_osO zuN5`Kq=8vojTz)$Ds|GDTo!7j2lTA?t0+g>On*i^_g(W$$46=Kn}090XqmJpGoOPQ zcC@sI@m$2F|tOTkU2vU2S)td|yhb@25D$xO!Cu{wc{7l3JQ zOv5>%9&?94w`+>M1Nb~hdp^#9mm5s_<*k?cQ6OamLoW~3C3!E4iJ zlCmDdzE_1wd{t+%?LI6T`4D3zd*k*63mM3_Ohz2ZLuR7QAuitL*KA@QFFRTh`GCI} zZE)7Mh`j?(wst>;?YjN^|01qc2R=hIa(8l2y&o49lqp=g&!Aiqir2uKzR8ZpW2U1ExZ{l+S@`D1d?#8TAH1p7q`OOIckd-#2j6+@MAH@XtkhY zH<&pb|M80?;0MxYeit3l81mHhBJ~4*jF7dEc0N6v)vrt}Hj;BPv=7?dlJ8^kM80z@ zaXU#i>QW$&o7C`x98dlzPADN=}-K=qCI)(j-oB=??^-_4B^x6&1vXL2c*nL(wHl7cv zERxxVn}iqUe*tpX$@ls~0q5DiJ@8xr}^np9|6JHX>nn!g7wnR6AD?r8hYX@@G$h=@kyOMcK|o zmR?07y!yLg!ro~V{GQI@MUPhB8RyY&t+%<{iBY#})>aM_qh}4s8%9L@bQxDAAlM(e zm+S+tNCsAp6iu(TmF{WTP7)7)*p=rEI+KoBl>MwxCrg_d35%(=wpNd-$e&t<@UVW_ zeu`I$Wg7fNsk1j0N;8K`2imXu%dXhQ?VSjzsg^D0MCV7&b|2GX9`Wz?Fkuw}9C8LvOv&N_lB{|1EA zCHf*}(m4T$gR+J9RC+jaEkKXtEWMs%2qEG@7i53&hlQsv7Vcq$hF^SkMq69UdrhuL z{|Ir4v>(|Pt^CesY^JmK+J~1_Zwc<@%9L+4&?~Rvt)>pkW&YfhIJYmZ4Mm=N=&om# zad2?!=FSO^|Fr4shrUOMef{?j9iw+t{(H=Vq&j}-Oq;YH{n^JV41RBJg1HZaV=L;g zW2xTDxAD(Nq72-z^!2OxhURKjD#NuCXGD6{Imc66tSdD)7v;2Fc#1SE*f?PGXOsId zDixchChCq9`_TD_xF&h(c}Wf?iCigA}|LWbYR;Kh~S@kif!*!m?=g3o)^?!illt238@!;~9&yWzg zN+>{IhkTx=(w|r*!l_Vtlm7izQgM2YkQYBRuA%sDUG!(8e%x_@pPEPNYpmyhNA=I6Jt~Q_K%c&`3-OQwfc|1gr!n#(|l6tM$T-EFws_G-V&b%FrhI2yJWr zaPqRh-;&+AfCR8diN7GO>e^2a)EcjnKa&!9=A}ApOgK_VS!}Zl&>F~8n<#UHJMs(8 zCXpJ`;$+_+>%NgJmQvjafId)Jzdw*#g{ln$A83)of7}U7{kHogP4fk!TZP~+WC^zR>;;*B^F{;`Vgk@!t~>nG_1(*0X10c!P$ zc78G^iX|cJJ!=JX_-bzS4m>EBh>TUAbMj(0(*op}XKAZBatZyy^?Z%ppJJTwu;o+F zDyHk!Bju>?fo{pXO`Z?Y_5%jng>DXb#wcs5Q^~&6Yain(!G{VZu&bdgB=a@u+&8GYV#zvzxovq@*M(yclpvBm+L!5>M>;~oS$gT+f{Ct; zrav0jkX)ZNfSGC@H}j*4zxy0EYH+!Lpwk}H&l4$MzsVYakQ9hB5)Jg@KSNya9Mzx* zZ9hK$_Yb9%ed7cf52Oi$syOYhv#=@t*EV}!oHRjaZP$k6=`u9Og94O7J0?m~o<1Y{$rTD{nR07}?Ik;DJCg5P@MPx%tc@dH zbW?%BhhVMF1r+59%uTA4q`jHlN|yYL)kWR=_YZZI3~PaBLPsy)!a?{&TE|+_-jI+J zPS8ogBYm;t-#<)=xRR&aZMFtI=@QnMf|lr<0K^cDvC?Qtdl~;+`-Q`{O4*l<4ozv#y3b4N=D4>^hk1)MUryY}Rn-$&edD;>c3iWC5dX5H$s$x^S91}g2b z*_Xy^GMU*8^xhj5rvALM59{g5-Yf>mgfL{!%TcpNb8d|L9ZIi~SJ191gr1!kDnO4q zFxpA_ViEkUQuQ31jrckp`#vXXe5E)?9{%fNMfNZ? z`%h@UQojWQejO8AU^x8wL-W?&fUc2Lz%u>9!(F71y;pddp4MQTRP*X<1+mw;`hsm4 zO{f;*TXUi^8QrJze>eO*r6z5xS+)zyG+ZY(?Lo3yH>_}-k>*=E6NkZ*xn=@@aKJP# z$_n7uXq$>)pTzK<^vd=tf^>*$*cznqy^2PC)7Tm8z4d2FBWtdJt)K!c^Fpo6H@zX* zlug9UJgmTAil;4(?0KjxYviV!-=hv%eGW7Lh9Y|axrUfKOgc285Ya3tU?0w4*3Nbj zW1a%773e{k>h0)gC3bY?%#SyuA{Sexg^hC8hz8XgMFlULG34c>#_X!x~nP zl|4toWHGEoJY@guCbH+^kskm$3!)C5Yzwkji>+Z$LD3- zJ+=WoOy>dMkJBr#cGEy1dbJ>4x2%3M|IWw$M}R+L5R&K5|22bp>kA5FqMU#85$g+~ zi5|uuo(_ITK0zu>B~Md*xRF`-kbL&E0Ab`NZL@af)Pk>}UH63w5Uk32MV!fxAQ#z- z_$>=7X6G|BV&C{EDj^t~EP`F=#u`^lc!*t&mujU#ZdGk8!gbxh&3x{m1wW1X9IyfN z(Op~tSCH8LFusD&$NiTwpaiP0V!vkV4``;z``qba#w$VcX5LW=;OrVEC|g1c6;RCiIfxS7B>)U!G8e025?(Prq3kivr`B(1g@mk&5UV zuT;UM73o2KeNnQI!xEf#3GjTeTlDm|3#+P+B?hAl&o!~0B*jAj=mE-RYqc*#&`z(F zM&C;~+p*b%s@yDHU`$l#|@Z`w0wnw=aPJLoTd z;uZOIr^k=j3d{a{udqo;WDUfrj*n<=Z=&7JMis1xWktCtW%!HGn9GH(Z3*F>JR-Ob zYVpa86qUbYg8YzBJXByYKJ2A{d>_3Vw<395EBG77xdIp*5Y>efE;TzL9WP#r|4hfx$w)gF~MWB@)CO-zz{ z1Metzm~$oXT0wD(zG*OUI|Lpxdj!&_NJVjHYtD16gRi4@ zX8yQyfQ5OfXF=A1Po2qVof2$=TWAtsdb_K#Z&h@+Z=|(4jK^_jcm9Ar&4i#Qk^sXW zjth`{Um;uIDr5U=0e*bdmXCp)T^S>JS2nZy+Md*j@@2ITqWx=40K+79=!$9Jzkh%x zgid9V2v?vdynL#$_m>fFxa&=%@Oc?OsN94*li}5HWGyaI|IQ1^=b9VjBFB4;!iLuY z3MI$aREumi5J)uHepT_Cm;Crq#;=ulnpz?~A}Cw0jv7l75IbIEBAfXjG`iVOrgE2^ zvlS`N6~r3C+Uup@;viseM8z-ikXI>@Wn%G$cY8ZQ*Hrd=IlFraiGWQiF12Uj1+49+ zUVRaWMlAGdXhJRtj@MLEr~9U>mh@V=tgg>+BMBLkYo#TB_L_Dhc-@%1^C#Hmh7Z^! zpSG2;VZE%Hxib7Q5RxT7l&xmozV>e0Lkx?!C~|KAY{UqI z8o~eWCA&TC>GM-dE+3Tv6e5a zK}x{et!HZ(&R*zBvIYrgFH|m#OoYh?36q=!%_H>(hlqwDELy#5m1LyLB-Rgzm%^cR z)`ywsMq&MvScdEW{((GwqFR3oN4w_iW-q$Ec{ol{#?CPW_Q{cR*h0XrO(;>{+o|bS ztCx*_qb2kCn&_Ju-L6(Ij^$n7mKF%$5G&Bb8XW~_&iwx3J;Y(qc`OwpN!0B~SX1!)8Y>q$Z%aP~!qS6ia5IC-`*w(1Z zNPRV;&+AaG82gsU70fZP`d6%7B2u7Ea576jp#6-mF|I`()Pa%Bi=f<|8B%w5Q$!ml zmo~C7`Ja}k0PZIMe=IVuA*S8kTzGb+uVc&eK*HDnN_U8ca{*GT?!9vb{IlNXjgka8 zGhWSM8yqxtZ9h!23JFP^X4%pgZG1vWnA5V)WO0CHkYRl{0w%jWH%dc2%Po2F3$qEc zcow?6fC1J<$o8^6ke(EXKDFI2R4%)DdgA?w52527&I71-nES4G3(sR7lcD=?0XyL* zxK7q~d5(CoE|j?)Fk4EZ$9=2$+_m<@MLmy1FHl>R02QDiNiWYy)mmXtQ1gcbv{I&6 z5LL$6ANgW*^XGiN4Ge~p;gD=+9}Xn^l-1fri@u%&HbL9v(DxdOflT-DWN^g0lO8(1 z00LI_27-}fa0eLTYy(axANtI`cRVlS?xo9Y7|Z?*=}V?NB!#;MtSj{8H`)ny23cet zoAl+fFk|;Q_lQ^2i8X8u16nvzF`-K|v1>>8PJ#eyi|tkG(5F$Z)oa6o?T@e@&|#p& zzvW)V=@4FkDOfkgPoR~cuMaSg3?SlUNY6I4ZH&iZwQXLWDn z(s^+s%&QqtXj0Y`wSk7#dAuN4u^wX z*bn`x_JVzSK=WNmLvov6Y_rnSZVDdHpi`q2GVoQ!u+E2#7IxC^OwGm=x7sUS<8+na~9x0UVv^J4Ff58 zrnwB9L>-YQwPMB{nos~e6t@g+>K$;S1Y_9HCA`y`&c=f`!G4ow13R(&KUm;n01>Ul z;ZaNBTnG8xme;B0*`0_P%wyYa>fVvNkN^ll_Did2iO{+h zmp!`oW=gL?34T$}uE@TO)r*5$&ynKw&K3|LQNBJ>i^<%!Q8sg@gn`G0(ppPxlE)$* z=TLx4{68lub|-}n+I@Uw?z`YLKxU`Ot^&A2;0S~zq>SGTnEExh5&S-%QLYDyR%gRz z?cDbS#_DxvdnD+R%PYQ(h&_vcqUEO?#FzdK$nUS@v7kSXVM>!v>)E4b1~;67Zc}ZD zv^`10xTY9~#pE(ZBcXlJ*;wukM0-}Oir%(|;fk?BB|!N#Q`8v4JTtolylu$IA0>u< z;AqDJybKJl-qLk`<)JY zGuZv>mr1Q;gxDn6z#GMdBkA4gBeNni8A7Ll5RK8!Ya!zynwZO5Cp`*k>ddjfCjb4z z1-7PO_(kpYomZx~mC8mZ?4>&EoN} zt922qEE~X*)7@k9SiyQI%c-6doA|M#3OYnw;Q+Gv?^s=RcF1AGym0^4uBup-<0W9X z<Erv;BALk+E!Y{a!M!{&3VB!jPE7n~$}753P-Kw?m7^+bqjbb4Lk^6N|LTR*uKz z#2gitX|l>0@X27ZwMH1A9A~b`andR-jIR+l!XJaM(Jxsm(7maW;S`O`A`E$&Vo*r~ zQ`hohx&|Xg9qvgUx<0ArP_a!PxY-WD28T)Qf#Fu{$ zrWv~H=+DXSKV*|M4SH`?z5*XUDJ%TZ^?iLr%Kg8!r0`VsS z{?G8o+Zyvm6bMTm3yml&i$kYqGgB;T3{wCjfov1paNlYsn0$(@kTc+4m`v0u`Pb z4@LlL8p{$75CybS;kL4F6TU4)(jHa#df72&0Dtctx9nKtmFD#3+S(|nHB;WTcL!8xrPi)pB6c`{|4iDL&v|2E@>{&z$*I>_WS=;xguUxc_qluG zit7Es`Fwt0_pYv*F!}!DU3}vh)-Qm&e=;HkEaM z3{blJbk53|wbjg3z;uJ$jrT)S;if5FV%g3P_$&OU_1BkIQQd;y4LfyKcJB!;GM3mH zv;4);@>k2l!4)vFKp>Ciu}CgShi`1!x%3bP=`i>plo`@{38uP%#))!rX<9l}OIrIjha6or> z;_Q9m3b^zx#3jGZoJqkt8PU*D@jKsq;pdqh6bvwg9asAc_x(>Cs#>`>X+I6*Z$#yi z8nQ!UWg{qeDN;Cjw)PWv)?R)sQK}eQg!*a!rUTiV4VQ7Ai>2Te8MMe63i+Dvze?kI zfwyZ*H@l&~>xh!ZGZ*ced%OPnmI-BdlE+uHiLSfMls3~AtooSyL29=Usz9p>21QDr z>k;kPMK3y{qA-P&JGr*3S`i2GbyX?;zUS^#zILyxjjI_)26WA=b#_G@syB4{!YB9M z9TPc+6Xqi4uPKI4?vf3!`g0{V(x;4wB5t2I3VFW#`E@x*W_VFd4iCuj8WGl+C0Pkh`8;+uhNThU!ma?AT7cO8|07Vmn3VP%L{ao)Y|ZIw8OKUMnMN zWvu0mBA?Nv<{dxK8JM|>{Z8jn%#%#|E{n##K0dRf}<)D;TMK8^T z<@x}~wxPU$bmlrsfd?mOg4-BhWE!^yzvp)NduO;(@J(kred=PYt2*g-dcmm*ht4xt zIl|uz^y5~RI`$3nh_!VrcqLM`5!KEe2gW*y@fgM@RW=4wAFY;eI@}$@t2R%onl9n5{jfKyV$! zU+}w%KEJllZZLteCX(z~9A^-zjLWZ>j4D!bLOyFwm?WPnrZut+63^9DvbBED`lCSn zF^x6VMtt{5tTPIAC$HWpXX3bOPg|GL|NKF z+}+gn*zdG~YK$fG<#rrIW42+@(L6W)*KY68-Zz-rC$9F7+^;frdret^_i;nY1pxC} zdr2U{0xcudf~>yDr#<|Cs8M=Q&BH5P%}*(diXjEhb$Ch)DX*i0iSLeE_T^q(ZI~H2 z1fsoB38jnl)HBIQ-@7JODi6AHL%wPCa4s3zkUs53RqtZ)E&G0Zi!_eIwj$Z0#IcxDST1EypTG zJ**p18;RaZ{$<57(k^F*ZL-G13exO~F^)FwsphcNx3;dzA5s-(vDz8dxYWW)&E6ldWTs;^xsc9Ixo+ zO~5?Ax}0j_Z3ef41)>J!edT=n@f|C}7)F)DLLa{B`Po`=1qN?)T`*nd-zAC8uGIl$ zym^E}=#e7I#&gBf5s>Z=tC#I|g(-way8_z{-#{7Xf$K$C`zAMuZ4gRk#R#p?5LzK` zo=%PYM44FL_`2Tj)F5u>ig|GEhi7BBbJrqgbHdMXHPx%^c*zRk!Wz9I`ZRb6UFo;z#rCr)yj}_ z(!+*qikB4o6Hw`!nn59+7Ih#=4mUJ{wwlrWIW!H|bfo0*n&IhUzD~DveWHcPcj1?Q z94Z4HE%AL{o!Ob>Nr}^|sZP(T*sF-PvY9RgEYCiv$%q2IH+)Tb=|s82PhVenAGEr7 z@#GwFCzf`lQdY>C2)0!r0HLDW)4i%a_2-Z6{xye%lB9bg@+=kD^S`U2Nkt~q;X7MfKp-R z|M%Gd1*~K~;!R3>K`Q&bP@D9sr|Q6sEhh9z#CI_bIEg+P)9;DS!lU=ZX-R-oF4%sr z;Z{ob?!IH?P2BkKIBHea94-yFo*CKfrRb*V;mmCeFGex-w=-= zP2b;tS3NUQRcJTodz->`_Yy$1!w&+k*A|2j8H;frr<2Gl0Q_AT{4kO!zlwpwLH?CK z+Y#tEv&xGu66_zwy@lR__3;dbo&)xRwO#n#e~y9w)$)a73Dv=z_Q{UJ*9O*V?yYzD z$uigOfyi3DAI^)TJ!Y@m|1;ieXlk)Ps_s}MuT9pT+~TbGis7C|W&~NNYp`&B#CQcf zfm=iDpXJWd-Kxk2gqjCfA77=HVLX4wzxSv5dlsi|Kic_L!B7vlF_2=-&h8rW;c-cA z;)$Pc?H@mH(4Z(~<{4;$tiU`*b2Lup08IPp#)bsT7HXY>VN?&2NnmJ7IRiXSH$qVh zCwIXgw<wz_YI|bkxi>|?fuK|J`pjmgY`Q$#ZqWXuLm5|S$o7CmmHD98l z9=mcL=WlK-vvwy4W1|Ad#_cBY&)~8l`LM9oW(z3es?R9sBDoxG7zo& zMbLw=8nqmbo}*g?QboJ`?$1_tdA8`6FKg1eE*ff#NLu`Ij?Yj;x(*FA*4kq|=ceJ3*5V&4@2 z1b>pqyl9Gng*zQlWnS6A2InfD&~asx?DDqZvi!aC_JJH-EMTf$6v3WQ`W@;i0qB-f zx=+%Die6BLBTf#-3fuJn9{Y~$(uVMX(QgNylh5#OI#04N%IPTM-Hr!HpDEA%Zn23n ziZygtw*gOPm|8&i1CAZkvpsuf+G7#>V9ri5tdm1IUweS|Gyn}|@EFw01pJ6=h{B@5 zwwHdq{K-P6>;unqe1dRAplithX)BTXwT%+AG`y}KFMF!dj^XEJkt`*-RF-lGTUjd zm^%X&MSq8?&j9~6_UCL*fpZUk3z`a;I9yWcwi?~8Xi@4}o=rfIPXO?)2KA=K%m>>o zm^O!tGsHhDF>ozKZGG$iQp_!rk2>8>$(#-7VI3hCOOcDv{z5G|lZnrt6^<*#`ZJ;K zo6#M;FlpFz2QK_Uu#49O_F{MPtCrA3WwdYh?w%_@3AvXt0#Nh6jf>c~f&g#2o);yp z`3Q3HjVPQaO8ByAzGAsKsOCXIle9v+xAq2&NI@JnAjf%yhK}!cHDy!7#$8pdo0zrQ z!K*mGQE5%>`zyAjg_nwMTX7!b<*|CarjoY#F0#^3aFh?gSXMQmsJk-SVzEWf&&|%b zf_xIEf!s(9n|<|#x=$tI)bKXT=KB%b>!Yva%V0A#g6%E@BsOAR(dfzRi7uUDL3jK! zJWbu9apExKjR9@5i+w$}cMk`|Y9AIE$`TSUd2Y*_d$j9sCxxx+UFqJ9dQ&~ri#KVh zrch)oB+I$H7jTEgb3HNBPBCz=g0hK_y)eHIH2|KY1G$AMe;LTuo9ONjb_o`+qiIPk zsyjHBk}FkB*Geg1`_(y+SCZg^6?t(vNW-trX0;qr3Elor)nX^sP~njChdKL7ywnU; z5Zcek=p6X8HGdCY`|v^&QA+}D{Q$)*A%S6EXW>9_^TwsmBt|N5D1s&Qu|5#U+Sv_u NwMs1iD){fz{{zL}9$f$c literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/chat_bottom_keyboard_nor.png b/ASHMessageTableViewDemo/images/chat_bottom_keyboard_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..83e65b780ba0bce0b42328b0c9e1170f3ae56f21 GIT binary patch literal 2023 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 literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/chat_bottom_smile_nor.png b/ASHMessageTableViewDemo/images/chat_bottom_smile_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..f089d60d4bfaa20b5b7dab611c8a2b3dadec290c GIT binary patch literal 2808 zcmX|Dc|6oz7avQK#Kf50uB>HCB3TC`YY52_;h`o=mhy;@E$i5ZBFUC5YqG>V_Away zmVM2Vodz*^f6v?JeedUU@BQ9$zW1E-J)ir>eQji*eSrnZ0s?_9=wLC%z>fKMGBW@x zJLO>@2t>bcq-Uy0>gd9`J{1-bH8a0=MM~}>2L}Sh1A`;2Z60t!AP_F7Hug3Y1{W2R zK=BA7QD`G$GcTXN(Y!*JE{hOSQekj}fuZpY1*N3qH!lNUA<=vaH&uY^uR_A>zW$?u z(MBNAFgP3tH9j#lH9hAa7y?J4wQuVyD5;5xUzL@+!7m`_<>L$Cf^}1Rp)go^MV0fT zCt=}{4a6p0JtGB0Wgwcf3l7OG07IaGs;;{D) z*xA9X7uXi)E(v;u+RZE0->t^*t{C>+Se1w#Rq z0Q~`isHmz#;V8fbfk5f#=zt~&2}`iBoYyxpttU1Dde5F^rl+URFDUl&4+8jQ6`xVu z{AeD*<`$Bhhu1|;2olW?N1%cDfY|AodGmW#00Ahboz(f?jDQ&p0HE#R5m87KFM$6H zBsc#bP*z^`KN~13C%>q;H2vKNz;avHh=G9t#UljhdgAsJDDMwVQd$lG|33n*kNHJ^ zTxZTO{Q-a0s_MF$x`xcGkGUU<5|iI%WacENq-WgtcJ#qX7w-a^bKun?RIwewRdzA8(T-l zCRSG0Nn}bpsjIQ6ZD?e?e{ghm{(D`0V`Fn$eM3`oYsci&-2CDSrFWpFmN+^#+1T7( zPi!6>9{V;i!<#|C1KPfL85@{v4jun$X&%@<8J{`X+xFaO8LVDBq5jqcJS-r4y-QK-@Cy6I?LDemAF}H6JcOHdfbG&bCfWis1N00XJxHQkNg4!V zqUm7NOrP7V_vq@PtU;u?dcI1DQtMEU0((mgBbP)C_ybsXwNp2uPAbTZ8Jb|0A0m|b zMN2K=9!A$~EZ-sxuk$@UfKY3=`E2XigubwMn4XN8pqI&tTi9Is>Ac;wncu1}g?HKM z_+;$7qFF5@7zEiCFpPl{0w4owZ1LS|12@k#T>*o>ZUp>eJBqf%t<| z-uCCeY*i)7BjczbzGh)(=s@TQU1Z>upx!|86lNWc z7)ae28_!k}XC^h5A9lvQcyQ#Ql%o}hYAAfFlFwRJ% zd{2VN(Knwrn6P(EA%2*eOrq3+naue?0XCjt7Qa^7ov$x`ei1gy!pO7{_BY}89gS

u@>VA6GK5UVBB{ z`s8)8`BTB&A}B6~DJada6HxQpQ2onp0($rejMuu(a)^ zP%Q7~s#&V|m$TjTA5ZKG`bKo4-3DC>M)m(>ywvtNlU-ZeHuJ#5wAM>JQd#qU_dP8n zhrhE*3Fg5pU7;geuJMJHmEB$OeVdaqDid)72}SOSw)lp?)RP)IcsJ}%T#G>={S zQ!%T+Ucuf|7p=GmZ(?$I^R-=^c(H24K_xa^Tu{?{Qlph8E?0KRYG=&L#nqjxad!TN zwg`T<9qf}@ix+FB?7>GAe2nXjOeNNZM#@Pxw~;beaVx$?uQ5^*FUy3@qu;mLmmd;8 zW4YI5zgb9>OWK}?LklnjLjK^>v&#_g01wM4oA@jlzg_p55KZ?p!P@xuOR2h#QRWa* zR5YTRKo+xKZb5UvGRj^jDjt4U zuq?H$TPj<6&)89Cq$^>@P1r?6J(D7kb8|~EqbMmF{qXbVma9__ZEsnsd(yLqar50U zxuJ1XjMHoz0W(Ri!_u7ghaF@btqRgdG#%S++)X5NE=;|yvWSLSBhE8Kp^4`W`1%*kpRG3eJD*Xg;_nd}QueR$i^1-hr!V?&iD+r!sZ& zmWe2+r+td;W#cR{nt%3L&8NqjnuIkU6|)AMQq1Ah(!)lr&RMF2q@NY1hQIDDNy(La zYpA#GIh*IZt$G6U9Vxlgt|_csCh%MxaghL zubnQT-IgDT4A~-)dD0S>U)jO+$$f_Vp39`jyvf`HY3V!0ym5d(yi4<3*`h9bd zA@A9H@9e%iEIQJ1lKh0-eb!wm)HaG9Qg3y0wN^2jR-hY_;kt^V;27?8ySi;a0CH*OfjD9-2Eoe+h%`+sJ;R`rBWeQU5&o z6qoQql2I<5mscz}djc;gkRJuZhVHLb^?vbWspz^AGjiknFI&;qr|W&{3tO>GRBEBw zmXM1#;!FWp?;jrr{*=2Nxh4fnpUi%|&!9Q^j0@XRmQ)aND)vaIUoNKGn>x zVEbSqX8$o*8P3}u6N)X)Bhz7(n`f98mfx=SzN{C7#9rM{}wTiAxKnc!{01F znz#}ubU8xDi#04w-cWhBFp1L8_dv*hrjGTma_ z&RImlZ|Fpq#*Qi|LdVzSKW$FT)R%9SUYC2ksCqw6wtE)->}Mbd|C}Ju!MwKa z_QJt}d)w+bMl0&9Se^H%tHDZ;Fnl0j5O#LGXV7F-#~G literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/chat_bottom_smile_press.png b/ASHMessageTableViewDemo/images/chat_bottom_smile_press.png new file mode 100755 index 0000000000000000000000000000000000000000..429b7e7f63fa4747ae0a6c5285a4482b9cd3abaa GIT binary patch literal 2873 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 V(h}i#brX%@9JLrI&+9Qj23;28(%Wn zftVmVI=k=e>h670O8GSRA7WObh8BH{qYhmVOp*i1WU|X%(n4<9(6=EsHn#7X6dP)*M%$MIYm+LkGR_ zD3cgSMoMb{pLg!uzTUDj%UstJ!1L;8fxtNG(6N3H^O71!R!X@6pZogyZmavgP>O`s z`Y+JOcz=KY?a=YxeVCWTKrHhQTZzxv?6R!#l^~)U;Bh=?GSES9=2?l{AwmlYNGYL+ z{yh)|^+1bxiG79$p(P;FCV()s2((Flh5!pFQbMV4P>0SSK_cHnG_R+@5<3KSqfPpY znUNN+<%P8VLUFRqu)bNH`=)5;0ylX6Mo|cW5qh$$zZczqMRh$k_QAVcU%}J2xjB*AYZ26x5-Mb6xm=ANYbl_=I2hjH|d-dCQ<4XfY4-Bd#5+4Ifj+SJC*a8Q&BukQlqfV;0R~b4-EBGqy2ehmbeg*k`JL zUn7L+>(+p;vhnG~*d4J0Aw~r|#VlB1t{Uc{vbU}>P!5|Gl7w+!lmHs1B&Cp?IjJ3`c2Sb%i&?m#`zw#gwgEwMw|<#(Cj zmeI7t4xu*t8G=Zt2vBdopCJ^5L%J;j(L!qp8u!(xL!C*}+Tn*gNeU$TkO=`4 z&_*BbBrK4SL#C>^H7cg9h9B-EDUk4Be8vL?KRSr?KOv@pq=BS?q=BS?+{}M}0x>R| UAB=vgp8x;=07*qoM6N<$g6~BxiU0rr literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/chat_bottom_up_press.png b/ASHMessageTableViewDemo/images/chat_bottom_up_press.png new file mode 100755 index 0000000000000000000000000000000000000000..c4edeeb88d0c5da11d92eb8a32d13fb6d3dc601b GIT binary patch literal 1568 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 literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/chatfrom_bg_normal.png b/ASHMessageTableViewDemo/images/chatfrom_bg_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..efb7edefedbea8d4c7548175c9d374534913ab16 GIT binary patch literal 3010 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 literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/chatto_bg_normal.png b/ASHMessageTableViewDemo/images/chatto_bg_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..86893f59b83177bc181347890bd10f3b5813f6d8 GIT binary patch literal 2711 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 M3!M4Ob6)X(14T&%d;kCd literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/icon01.jpg b/ASHMessageTableViewDemo/images/icon01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b42040a2286412c84b4cb45b189b0681a49f825 GIT binary patch literal 40086 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 literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/icon02.jpg b/ASHMessageTableViewDemo/images/icon02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfb808a909b7c665beb4e270e1497c9a81aacf3d GIT binary patch literal 8056 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 bj#o#^hdl!+4ZzrQAwHJNYyZ}Qr^WvP6VPSm literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/images/toolbar_bottom_bar.png b/ASHMessageTableViewDemo/images/toolbar_bottom_bar.png new file mode 100755 index 0000000000000000000000000000000000000000..b99556afa7234e238d65c60638adae899fefbc08 GIT binary patch literal 362 zcmV-w0hRuVP)JP--u*e??vLnwf7>~ z+BuQ#wzN(pTiRMAyS24Q0m7yh$>ydKDM08ek!<#*NH+OWqyV8SMY7RdMG6qs zSCMR}3z7B^R)t8`SGh<5!ZH`hx-u8Zx-t`q58G=dQiw1Wi4U716)8lRh{T7!NJKK9 zCnALiW0B0|u}J2!SfpKq7m=*aE+Pd8(~C$)46F1kQh+cyi*&&7AKwpbMgRZ+07*qo IM6N<$f{|R8%K!iX literal 0 HcmV?d00001 diff --git a/ASHMessageTableViewDemo/messages.plist b/ASHMessageTableViewDemo/messages.plist new file mode 100644 index 0000000..9511216 --- /dev/null +++ b/ASHMessageTableViewDemo/messages.plist @@ -0,0 +1,96 @@ + + + + + + content + 喂,2B! + icon + icon01.jpg + time + 前天 10:25 + type + 0 + + + content + 问你个严肃的事 + icon + icon01.jpg + time + 前天 10:25 + type + 0 + + + content + 你妹夫啊,你才2B!说,什么事? + icon + icon02.jpg + time + 昨天 20:05 + type + 1 + + + content + 你姐夫啊,我就想问下:你是不是我最好的朋友? + icon + icon01.jpg + time + 昨天 20:07 + type + 0 + + + content + 不借 + icon + icon02.jpg + time + 昨天 20:07 + type + 1 + + + content + 借你妹夫啊,哥又不穷,不是找你借钱。你就回答“是”或者“不是”。 + icon + icon01.jpg + time + 昨天 20:07 + type + 0 + + + content + + icon + icon02.jpg + time + 昨天 20:11 + type + 1 + + + content + 刚才看了部非常感人的电视剧,电视上说狗才是人类最好的朋友,所以我想确认一下 + icon + icon01.jpg + time + 昨天 20:15 + type + 0 + + + content + 你妈B的!!!滚!!! + icon + icon02.jpg + time + 昨天 20:15 + type + 1 + + + diff --git a/ASHMessageTableViewDemo/model/.DS_Store b/ASHMessageTableViewDemo/model/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..69c9a0ce067e8ad8808d7f785b05f578eab95441 GIT binary patch literal 6148 zcmeHKJx>Bb5S)H*zmaFh1pw z|BjXJWcjdKzs^_dIqI74j`@QBaX(IQkN+cPsQ?wA0#twsT($z}*=D2bKt?J+1*pKU z0``3 + +@interface ChartMessage : NSObject +@property (nonatomic,assign) ChartMessageType messageType; +@property (nonatomic, copy) NSString *icon; +//@property (nonatomic, copy) NSString *time; +@property (nonatomic, copy) NSString *content; +@property (nonatomic, copy) NSDictionary *dict; +@end diff --git a/ASHMessageTableViewDemo/model/ChartMessage.m b/ASHMessageTableViewDemo/model/ChartMessage.m new file mode 100644 index 0000000..2a71f96 --- /dev/null +++ b/ASHMessageTableViewDemo/model/ChartMessage.m @@ -0,0 +1,22 @@ +// +// ChartMessage.m +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import "ChartMessage.h" + +@implementation ChartMessage + +-(void)setDict:(NSDictionary *)dict +{ + _dict=dict; + + self.icon=dict[@"icon"]; +// self.time=dict[@"time"]; + self.content=dict[@"content"]; + self.messageType=[dict[@"type"] intValue]; +} +@end diff --git a/ASHMessageTableViewDemo/view/.DS_Store b/ASHMessageTableViewDemo/view/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..97133ea0761b010e657fd16d14b2c8e825f722f8 GIT binary patch literal 6148 zcmeHK%Sr=55Ukc50$vtR9_I@L|6qvm;92mjQ6WNfK_XuF&$Vj0RTdZYBq4OeO!ZDb zrl(-%0l*fo_h&!{V9q8qDHEdMNz*|%3$5kY;v7AmvBkqgqFo$P?Z>Qoja$61?(h1w zifcS_C2u&z`f}6Xtv3CN{@wdX+OqzVQnNUJqZwX-utbv0gEfn)mqK8^MG0ej`Uc#>i4vroU zYcn%X%>4Oyu{Jx$OLK=+$Ly1VWMIs|p?`Kd|1bE8vemH*6C54N@r7N0$J8XdgLgMz +@class ChartContentView,ChartMessage; + +@protocol ChartContentViewDelegate + +-(void)chartContentViewLongPress:(ChartContentView *)chartView content:(NSString *)content; +-(void)chartContentViewTapPress:(ChartContentView *)chartView content:(NSString *)content; + +@end + +@interface ChartContentView : UIView +@property (nonatomic,strong) UIImageView *backImageView; +@property (nonatomic,strong) UILabel *contentLabel; +@property (nonatomic,strong) ChartMessage *chartMessage; +@property (nonatomic,assign) id delegate; +@end diff --git a/ASHMessageTableViewDemo/view/ChartContentView.m b/ASHMessageTableViewDemo/view/ChartContentView.m new file mode 100644 index 0000000..e77603b --- /dev/null +++ b/ASHMessageTableViewDemo/view/ChartContentView.m @@ -0,0 +1,63 @@ +// +// ChartContentView.m +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// +#define kContentStartMargin 25 +#import "ChartContentView.h" +#import "ChartMessage.h" +@implementation ChartContentView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + + self.backImageView=[[UIImageView alloc]init]; + self.backImageView.userInteractionEnabled=YES; + [self addSubview:self.backImageView]; + + self.contentLabel=[[UILabel alloc]init]; + self.contentLabel.numberOfLines=0; + self.contentLabel.textAlignment=NSTextAlignmentLeft; + self.contentLabel.font=[UIFont fontWithName:@"HelveticaNeue" size:13]; + [self addSubview:self.contentLabel]; + + [self addGestureRecognizer: [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longTap:)]]; + + [self addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapPress:)]]; + } + return self; +} +-(void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + + self.backImageView.frame=self.bounds; + CGFloat contentLabelX=0; + if(self.chartMessage.messageType==kMessageFrom){ + + contentLabelX=kContentStartMargin*0.8; + }else if(self.chartMessage.messageType==kMessageTo){ + contentLabelX=kContentStartMargin*0.5; + } + self.contentLabel.frame=CGRectMake(contentLabelX, -3, self.frame.size.width-kContentStartMargin-5, self.frame.size.height); + +} +-(void)longTap:(UILongPressGestureRecognizer *)longTap +{ + if([self.delegate respondsToSelector:@selector(chartContentViewLongPress:content:)]){ + + [self.delegate chartContentViewLongPress:self content:self.contentLabel.text]; + } +} +-(void)tapPress:(UILongPressGestureRecognizer *)tapPress +{ + if([self.delegate respondsToSelector:@selector(chartContentViewTapPress:content:)]){ + + [self.delegate chartContentViewTapPress:self content:self.contentLabel.text]; + } +} +@end diff --git a/ASHMessageTableViewDemo/view/KeyBordVIew.h b/ASHMessageTableViewDemo/view/KeyBordVIew.h new file mode 100644 index 0000000..05c2b54 --- /dev/null +++ b/ASHMessageTableViewDemo/view/KeyBordVIew.h @@ -0,0 +1,23 @@ +// +// KeyBordVIew.h +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import + +@class KeyBordVIew; + +@protocol KeyBordVIewDelegate + +-(void)KeyBordView:(KeyBordVIew *)keyBoardView textFiledReturn:(UITextField *)textFiled; +-(void)KeyBordView:(KeyBordVIew *)keyBoardView textFiledBegin:(UITextField *)textFiled; +-(void)beginRecord; +-(void)finishRecord; +@end + +@interface KeyBordVIew : UIView +@property (nonatomic,assign) iddelegate; +@end diff --git a/ASHMessageTableViewDemo/view/KeyBordVIew.m b/ASHMessageTableViewDemo/view/KeyBordVIew.m new file mode 100644 index 0000000..0aa7602 --- /dev/null +++ b/ASHMessageTableViewDemo/view/KeyBordVIew.m @@ -0,0 +1,149 @@ +// +// KeyBordVIew.m +// 气泡 +// +// Created by zzy on 14-5-13. +// Copyright (c) 2014年 zzy. All rights reserved. +// + +#import "KeyBordVIew.h" +#import "ChartMessage.h" +#import "ChartCellFrame.h" + +@interface KeyBordVIew() +@property (nonatomic,strong) UIImageView *backImageView; +@property (nonatomic,strong) UIButton *voiceBtn; +@property (nonatomic,strong) UIButton *imageBtn; +@property (nonatomic,strong) UIButton *addBtn; +@property (nonatomic,strong) UIButton *speakBtn; +@property (nonatomic,strong) UITextField *textField; +@end + +@implementation KeyBordVIew + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + [self initialData]; + } + return self; +} + +-(UIButton *)buttonWith:(NSString *)noraml hightLight:(NSString *)hightLight action:(SEL)action +{ + UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom]; + [btn setImage:[UIImage imageNamed:noraml] forState:UIControlStateNormal]; + [btn setImage:[UIImage imageNamed:hightLight] forState:UIControlStateHighlighted]; + [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; + return btn; +} +-(void)initialData +{ + self.backImageView=[[UIImageView alloc]initWithFrame:self.bounds]; + self.backImageView.image=[UIImage strethImageWith:@"toolbar_bottom_bar.png"]; + [self addSubview:self.backImageView]; + + self.voiceBtn=[self buttonWith:@"chat_bottom_voice_nor.png" hightLight:@"chat_bottom_voice_press.png" action:@selector(voiceBtnPress:)]; + [self.voiceBtn setFrame:CGRectMake(0,0, 33, 33)]; + [self.voiceBtn setCenter:CGPointMake(30, self.frame.size.height*0.5)]; + [self addSubview:self.voiceBtn]; + + self.textField=[[UITextField alloc]initWithFrame:CGRectMake(0, 0, 180, self.frame.size.height*0.8)]; + self.textField.returnKeyType=UIReturnKeySend; + self.textField.center=CGPointMake(145, self.frame.size.height*0.5); + self.textField.font=[UIFont fontWithName:@"HelveticaNeue" size:14]; + self.textField.placeholder=@"请输入..."; + self.textField.background=[UIImage imageNamed:@"chat_bottom_textfield.png"]; + self.textField.delegate=self; + [self addSubview:self.textField]; + + self.imageBtn=[self buttonWith:@"chat_bottom_smile_nor.png" hightLight:@"chat_bottom_smile_press.png" action:@selector(imageBtnPress:)]; + [self.imageBtn setFrame:CGRectMake(0, 0, 33, 33)]; + [self.imageBtn setCenter:CGPointMake(260, self.frame.size.height*0.5)]; + [self addSubview:self.imageBtn]; + + self.addBtn=[self buttonWith:@"chat_bottom_up_nor.png" hightLight:@"chat_bottom_up_press.png" action:@selector(addBtnPress:)]; + [self.addBtn setFrame:CGRectMake(0, 0, 33, 33)]; + [self.addBtn setCenter:CGPointMake(300, self.frame.size.height*0.5)]; + [self addSubview:self.addBtn]; + + self.speakBtn=[self buttonWith:nil hightLight:nil action:@selector(speakBtnPress:)]; + [self.speakBtn setTitle:@"按住说话" forState:UIControlStateNormal]; + [self.speakBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; + [self.speakBtn addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown]; + [self.speakBtn setTitleColor:[UIColor redColor] forState:(UIControlState)UIControlEventTouchDown]; + [self.speakBtn setBackgroundColor:[UIColor whiteColor]]; + [self.speakBtn setFrame:self.textField.frame]; + self.speakBtn.hidden=YES; + [self addSubview:self.speakBtn]; +} +-(void)touchDown:(UIButton *)voice +{ + //开始录音 + + if([self.delegate respondsToSelector:@selector(beginRecord)]){ + + [self.delegate beginRecord]; + } + NSLog(@"开始录音"); +} +-(void)speakBtnPress:(UIButton *)voice +{ + //结束录音 + + if([self.delegate respondsToSelector:@selector(finishRecord)]){ + + [self.delegate finishRecord]; + } + NSLog(@"结束录音"); +} +-(void)voiceBtnPress:(UIButton *)voice +{ + NSString *normal,*hightLight; + if(self.speakBtn.hidden==YES){ + + self.speakBtn.hidden=NO; + self.textField.hidden=YES; + normal=@"chat_bottom_keyboard_nor.png"; + hightLight=@"chat_bottom_keyboard_press.png"; + + }else{ + + self.speakBtn.hidden=YES; + self.textField.hidden=NO; + normal=@"chat_bottom_voice_nor.png"; + hightLight=@"chat_bottom_voice_press.png"; + + } + [voice setImage:[UIImage imageNamed:normal] forState:UIControlStateNormal]; + [voice setImage:[UIImage imageNamed:hightLight] forState:UIControlStateHighlighted]; +} +-(void)imageBtnPress:(UIButton *)image +{ + + +} +-(void)addBtnPress:(UIButton *)image +{ + + +} +-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField +{ + if([self.delegate respondsToSelector:@selector(KeyBordView:textFiledBegin:)]){ + + [self.delegate KeyBordView:self textFiledBegin:textField]; + } + return YES; +} +-(BOOL)textFieldShouldReturn:(UITextField *)textField +{ + if([self.delegate respondsToSelector:@selector(KeyBordView:textFiledReturn:)]){ + + [self.delegate KeyBordView:self textFiledReturn:textField]; + } + return YES; +} +@end