├── .gitignore ├── CollectionsOfExample.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── mac.xcuserdatad │ └── xcschemes │ ├── CollectionsOfExample.xcscheme │ └── xcschememanagement.plist ├── CollectionsOfExample.xcworkspace └── contents.xcworkspacedata ├── CollectionsOfExample ├── Assets.xcassets │ ├── AVFoundation图片素材 │ │ ├── 001_语音播放文字内容图片素材 │ │ │ ├── Contents.json │ │ │ ├── pauseVoice.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pauseVoice.jpg │ │ │ ├── playVoice.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── playVoice.jpg │ │ │ └── voice.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── voice.jpg │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── CoreBluetooth │ │ ├── Contents.json │ │ ├── demo_avatar_cook.imageset │ │ │ ├── Contents.json │ │ │ ├── demo_avatar_cook.png │ │ │ ├── demo_avatar_cook@2x.png │ │ │ └── demo_avatar_cook@3x.png │ │ ├── demo_avatar_jobs.imageset │ │ │ ├── Contents.json │ │ │ ├── demo_avatar_jobs.png │ │ │ ├── demo_avatar_jobs@2x.png │ │ │ └── demo_avatar_jobs@3x.png │ │ ├── demo_avatar_woz.imageset │ │ │ ├── Contents.json │ │ │ ├── demo_avatar_woz.png │ │ │ ├── demo_avatar_woz@2x.png │ │ │ └── demo_avatar_woz@3x.png │ │ └── goldengate.imageset │ │ │ ├── Contents.json │ │ │ ├── goldengate.png │ │ │ ├── goldengate@2x.png │ │ │ └── goldengate@3x.png │ ├── Example(例子)图片素材 │ │ ├── 002_雪花飘落效果 │ │ │ ├── Contents.json │ │ │ ├── snow.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── snow.png │ │ │ └── snow_background.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── snow_background.png │ │ ├── 004_无限滚动轮播图素材 │ │ │ ├── Contents.json │ │ │ ├── advertisement0.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── advertisement0.png │ │ │ ├── advertisement1.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── advertisement1.png │ │ │ ├── advertisement2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── advertisement2.png │ │ │ ├── advertisement3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── advertisement3.png │ │ │ ├── advertisement4.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── advertisement4.png │ │ │ └── advertisement5.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── advertisement5.png │ │ └── Contents.json │ ├── FFDropDownMenu │ │ └── Images │ │ │ ├── Contents.json │ │ │ ├── QQHomeBg.imageset │ │ │ ├── Contents.json │ │ │ └── QQHomeBg.png │ │ │ ├── QQIcon.imageset │ │ │ ├── Contents.json │ │ │ └── QQIcon.png │ │ │ ├── dropDownMenu_background.imageset │ │ │ ├── Contents.json │ │ │ └── dropDownMenu_background.png │ │ │ ├── icon_greenArror.imageset │ │ │ ├── Contents.json │ │ │ └── icon_greenArror.png │ │ │ ├── menu0.imageset │ │ │ ├── Contents.json │ │ │ └── menu0.png │ │ │ ├── menu1.imageset │ │ │ ├── Contents.json │ │ │ └── menu1.png │ │ │ ├── menu2.imageset │ │ │ ├── Contents.json │ │ │ └── menu2.png │ │ │ ├── menu3.imageset │ │ │ ├── Contents.json │ │ │ └── menu3.png │ │ │ ├── menu4.imageset │ │ │ ├── Contents.json │ │ │ └── menu4.png │ │ │ ├── menu5.imageset │ │ │ ├── Contents.json │ │ │ └── menu5.png │ │ │ ├── menuBackground.imageset │ │ │ ├── Contents.json │ │ │ └── menuBackground.png │ │ │ └── nemuItem.imageset │ │ │ ├── Contents.json │ │ │ └── nemuItem.png │ └── logo │ │ ├── Contents.json │ │ ├── exampleDefaultImg.imageset │ │ ├── Contents.json │ │ └── exampleDefaultImg.png │ │ └── logo.imageset │ │ ├── Contents.json │ │ └── logo.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Classes │ ├── AVFoundation │ │ └── 001_语音播放文字内容 │ │ │ └── Controller │ │ │ ├── FFVoicePlayTextController.h │ │ │ ├── FFVoicePlayTextController.m │ │ │ └── FFVoicePlayTextController.xib │ ├── CoreBluetooth(蓝牙) │ │ ├── 中心模式(CBCentralManager) │ │ │ └── Controller │ │ │ │ ├── FFCentralManagerModeController.h │ │ │ │ └── FFCentralManagerModeController.m │ │ ├── 外设模式(CBPeripheralManager) │ │ │ └── Controller │ │ │ │ ├── FFPeripheralManagerModeController.h │ │ │ │ └── FFPeripheralManagerModeController.m │ │ └── 聊天(CorBluetooth实战1) │ │ │ ├── Controller │ │ │ ├── CBCentralManagerController.h │ │ │ ├── CBCentralManagerController.m │ │ │ ├── CBPeripheralManagerController.h │ │ │ ├── CBPeripheralManagerController.m │ │ │ ├── FFCoreBluetoothChatController.h │ │ │ ├── FFCoreBluetoothChatController.m │ │ │ └── FFCoreBluetoothChatController.xib │ │ │ ├── JSQMessagesViewController(请忽略我) │ │ │ ├── Assets │ │ │ │ └── JSQMessagesAssets.bundle │ │ │ │ │ ├── Base.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── Images │ │ │ │ │ ├── bubble_min.png │ │ │ │ │ ├── bubble_min@2x.png │ │ │ │ │ ├── bubble_min@3x.png │ │ │ │ │ ├── bubble_min_tailless.png │ │ │ │ │ ├── bubble_min_tailless@2x.png │ │ │ │ │ ├── bubble_min_tailless@3x.png │ │ │ │ │ ├── bubble_regular.png │ │ │ │ │ ├── bubble_regular@2x.png │ │ │ │ │ ├── bubble_regular@3x.png │ │ │ │ │ ├── bubble_stroked.png │ │ │ │ │ ├── bubble_stroked@2x.png │ │ │ │ │ ├── bubble_stroked@3x.png │ │ │ │ │ ├── bubble_stroked_tailless.png │ │ │ │ │ ├── bubble_stroked_tailless@2x.png │ │ │ │ │ ├── bubble_stroked_tailless@3x.png │ │ │ │ │ ├── bubble_tailless.png │ │ │ │ │ ├── bubble_tailless@2x.png │ │ │ │ │ ├── bubble_tailless@3x.png │ │ │ │ │ ├── clip.png │ │ │ │ │ ├── clip@2x.png │ │ │ │ │ ├── clip@3x.png │ │ │ │ │ ├── pause.png │ │ │ │ │ ├── pause@2x.png │ │ │ │ │ ├── pause@3x.png │ │ │ │ │ ├── play.png │ │ │ │ │ ├── play@2x.png │ │ │ │ │ ├── play@3x.png │ │ │ │ │ ├── share.png │ │ │ │ │ ├── share@2x.png │ │ │ │ │ ├── share@3x.png │ │ │ │ │ ├── typing.png │ │ │ │ │ ├── typing@2x.png │ │ │ │ │ └── typing@3x.png │ │ │ │ │ ├── Sounds │ │ │ │ │ ├── message_received.aiff │ │ │ │ │ └── message_sent.aiff │ │ │ │ │ ├── ar.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── bs.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── cs.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── da.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── de.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── en.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── es.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── fa.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── fi.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── fr.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── he.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── hr.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── id.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── it.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── ja.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── ko.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── ms.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── nb.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── nl.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── pl.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── pt.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── ro.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── ru.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── sv.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── th.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── tr.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── vi.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ ├── zh-Hans.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ │ │ └── zh-Hant.lproj │ │ │ │ │ └── JSQMessages.strings │ │ │ ├── Categories │ │ │ │ ├── NSBundle+JSQMessages.h │ │ │ │ ├── NSBundle+JSQMessages.m │ │ │ │ ├── NSString+JSQMessages.h │ │ │ │ ├── NSString+JSQMessages.m │ │ │ │ ├── UIColor+JSQMessages.h │ │ │ │ ├── UIColor+JSQMessages.m │ │ │ │ ├── UIImage+JSQMessages.h │ │ │ │ ├── UIImage+JSQMessages.m │ │ │ │ ├── UIView+JSQMessages.h │ │ │ │ └── UIView+JSQMessages.m │ │ │ ├── Controllers │ │ │ │ ├── JSQMessagesViewController.h │ │ │ │ ├── JSQMessagesViewController.m │ │ │ │ └── JSQMessagesViewController.xib │ │ │ ├── Factories │ │ │ │ ├── JSQMessagesAvatarImageFactory.h │ │ │ │ ├── JSQMessagesAvatarImageFactory.m │ │ │ │ ├── JSQMessagesBubbleImageFactory.h │ │ │ │ ├── JSQMessagesBubbleImageFactory.m │ │ │ │ ├── JSQMessagesMediaViewBubbleImageMasker.h │ │ │ │ ├── JSQMessagesMediaViewBubbleImageMasker.m │ │ │ │ ├── JSQMessagesTimestampFormatter.h │ │ │ │ ├── JSQMessagesTimestampFormatter.m │ │ │ │ ├── JSQMessagesToolbarButtonFactory.h │ │ │ │ ├── JSQMessagesToolbarButtonFactory.m │ │ │ │ ├── JSQMessagesVideoThumbnailFactory.h │ │ │ │ └── JSQMessagesVideoThumbnailFactory.m │ │ │ ├── JSQMessages.h │ │ │ ├── Layout │ │ │ │ ├── JSQAudioMediaViewAttributes.h │ │ │ │ ├── JSQAudioMediaViewAttributes.m │ │ │ │ ├── JSQMessagesBubbleSizeCalculating.h │ │ │ │ ├── JSQMessagesBubblesSizeCalculator.h │ │ │ │ ├── JSQMessagesBubblesSizeCalculator.m │ │ │ │ ├── JSQMessagesCollectionViewFlowLayout.h │ │ │ │ ├── JSQMessagesCollectionViewFlowLayout.m │ │ │ │ ├── JSQMessagesCollectionViewFlowLayoutInvalidationContext.h │ │ │ │ ├── JSQMessagesCollectionViewFlowLayoutInvalidationContext.m │ │ │ │ ├── JSQMessagesCollectionViewLayoutAttributes.h │ │ │ │ └── JSQMessagesCollectionViewLayoutAttributes.m │ │ │ ├── Model │ │ │ │ ├── JSQAudioMediaItem.h │ │ │ │ ├── JSQAudioMediaItem.m │ │ │ │ ├── JSQLocationMediaItem.h │ │ │ │ ├── JSQLocationMediaItem.m │ │ │ │ ├── JSQMediaItem.h │ │ │ │ ├── JSQMediaItem.m │ │ │ │ ├── JSQMessage.h │ │ │ │ ├── JSQMessage.m │ │ │ │ ├── JSQMessageAvatarImageDataSource.h │ │ │ │ ├── JSQMessageBubbleImageDataSource.h │ │ │ │ ├── JSQMessageData.h │ │ │ │ ├── JSQMessageMediaData.h │ │ │ │ ├── JSQMessagesAvatarImage.h │ │ │ │ ├── JSQMessagesAvatarImage.m │ │ │ │ ├── JSQMessagesBubbleImage.h │ │ │ │ ├── JSQMessagesBubbleImage.m │ │ │ │ ├── JSQMessagesCollectionViewDataSource.h │ │ │ │ ├── JSQMessagesCollectionViewDelegateFlowLayout.h │ │ │ │ ├── JSQMessagesViewAccessoryButtonDelegate.h │ │ │ │ ├── JSQPhotoMediaItem.h │ │ │ │ ├── JSQPhotoMediaItem.m │ │ │ │ ├── JSQVideoMediaItem.h │ │ │ │ └── JSQVideoMediaItem.m │ │ │ └── Views │ │ │ │ ├── JSQMessagesCellTextView.h │ │ │ │ ├── JSQMessagesCellTextView.m │ │ │ │ ├── JSQMessagesCollectionView.h │ │ │ │ ├── JSQMessagesCollectionView.m │ │ │ │ ├── JSQMessagesCollectionViewCell.h │ │ │ │ ├── JSQMessagesCollectionViewCell.m │ │ │ │ ├── JSQMessagesCollectionViewCellIncoming.h │ │ │ │ ├── JSQMessagesCollectionViewCellIncoming.m │ │ │ │ ├── JSQMessagesCollectionViewCellIncoming.xib │ │ │ │ ├── JSQMessagesCollectionViewCellOutgoing.h │ │ │ │ ├── JSQMessagesCollectionViewCellOutgoing.m │ │ │ │ ├── JSQMessagesCollectionViewCellOutgoing.xib │ │ │ │ ├── JSQMessagesComposerTextView.h │ │ │ │ ├── JSQMessagesComposerTextView.m │ │ │ │ ├── JSQMessagesInputToolbar.h │ │ │ │ ├── JSQMessagesInputToolbar.m │ │ │ │ ├── JSQMessagesLabel.h │ │ │ │ ├── JSQMessagesLabel.m │ │ │ │ ├── JSQMessagesLoadEarlierHeaderView.h │ │ │ │ ├── JSQMessagesLoadEarlierHeaderView.m │ │ │ │ ├── JSQMessagesLoadEarlierHeaderView.xib │ │ │ │ ├── JSQMessagesMediaPlaceholderView.h │ │ │ │ ├── JSQMessagesMediaPlaceholderView.m │ │ │ │ ├── JSQMessagesToolbarContentView.h │ │ │ │ ├── JSQMessagesToolbarContentView.m │ │ │ │ ├── JSQMessagesToolbarContentView.xib │ │ │ │ ├── JSQMessagesTypingIndicatorFooterView.h │ │ │ │ ├── JSQMessagesTypingIndicatorFooterView.m │ │ │ │ ├── JSQMessagesTypingIndicatorFooterView.xib │ │ │ │ ├── JSQMessagesTypingView.h │ │ │ │ └── JSQMessagesTypingView.m │ │ │ ├── MessageBasedViewController(请忽略我) │ │ │ ├── DemoMessagesViewController.h │ │ │ ├── DemoMessagesViewController.m │ │ │ ├── DemoModelData.h │ │ │ ├── DemoModelData.m │ │ │ ├── NSUserDefaults+DemoSettings.h │ │ │ ├── NSUserDefaults+DemoSettings.m │ │ │ └── jsq_messages_sample.m4a │ │ │ ├── Model │ │ │ ├── FFChatMessageModel.h │ │ │ └── FFChatMessageModel.m │ │ │ └── View │ │ │ ├── FFChatReceiveMessageCell.h │ │ │ ├── FFChatReceiveMessageCell.m │ │ │ ├── FFChatReceiveMessageCell.xib │ │ │ ├── FFChatSendMessageCell.h │ │ │ ├── FFChatSendMessageCell.m │ │ │ ├── FFChatSendMessageCell.xib │ │ │ ├── FFCustomWithPlaceHolderTextView.h │ │ │ └── FFCustomWithPlaceHolderTextView.m │ ├── Example(例子) │ │ ├── 001_不同宽度的标签 │ │ │ ├── Cell │ │ │ │ ├── FFDifferentWidthTagCell.h │ │ │ │ └── FFDifferentWidthTagCell.m │ │ │ ├── Controller │ │ │ │ ├── FFDifferentWidthTagVC.h │ │ │ │ └── FFDifferentWidthTagVC.m │ │ │ └── Model │ │ │ │ ├── FFDifferentWidthTagModel.h │ │ │ │ └── FFDifferentWidthTagModel.m │ │ ├── 002_雪花飘落效果 │ │ │ ├── Controller │ │ │ │ ├── FFSnowflakesFallingVC.h │ │ │ │ └── FFSnowflakesFallingVC.m │ │ │ └── View │ │ │ │ ├── FFSnowflakesFallingView.h │ │ │ │ └── FFSnowflakesFallingView.m │ │ ├── 003_正则表达式Demo │ │ │ └── Controller │ │ │ │ ├── FFRegulationExpressDemoVC.h │ │ │ │ ├── FFRegulationExpressDemoVC.m │ │ │ │ └── FFRegulationExpressDemoVC.xib │ │ ├── 004_无限滚动轮播图 │ │ │ ├── Controller │ │ │ │ ├── FFCircleScrollPhotoVC.h │ │ │ │ └── FFCircleScrollPhotoVC.m │ │ │ └── View │ │ │ │ ├── FFCircleScrollPhotoCell.h │ │ │ │ ├── FFCircleScrollPhotoCell.m │ │ │ │ ├── FFCircleScrollPhotoCell.xib │ │ │ │ ├── FFCircleScrollPhotoView.h │ │ │ │ └── FFCircleScrollPhotoView.m │ │ └── 006_UIWindow的巧用,点击状态栏滚动到最顶部 │ │ │ ├── Controller │ │ │ ├── FFUIWindowUsage_ClickStatusBarScrollToTopVC.h │ │ │ ├── FFUIWindowUsage_ClickStatusBarScrollToTopVC.m │ │ │ ├── FFUIWindowUsage_ClickStatusBarScrollToTopVC.xib │ │ │ ├── FFUIWindowUsage_MultipleScrollView.h │ │ │ ├── FFUIWindowUsage_MultipleScrollView.m │ │ │ ├── FFUIWindowUsage_SingleScrollViewVC.h │ │ │ └── FFUIWindowUsage_SingleScrollViewVC.m │ │ │ └── Tools │ │ │ ├── FFClickStatusBarScrollToTopManager.h │ │ │ └── FFClickStatusBarScrollToTopManager.m │ ├── FFDropDownMenu │ │ ├── 公共部分 │ │ │ ├── FFDropDownMenuNextPageVC.h │ │ │ ├── FFDropDownMenuNextPageVC.m │ │ │ └── FFDropDownMenuNextPageVC.xib │ │ ├── 基本用法 │ │ │ └── Controller │ │ │ │ ├── FFDropDownMenuBaseUsageVC.h │ │ │ │ ├── FFDropDownMenuBaseUsageVC.m │ │ │ │ └── FFDropDownMenuBaseUsageVC.xib │ │ ├── 实战____自定义菜单效果1 │ │ │ ├── Controller │ │ │ │ ├── FFDropDownCustomMenuStyle1VC.h │ │ │ │ ├── FFDropDownCustomMenuStyle1VC.m │ │ │ │ └── FFDropDownCustomMenuStyle1VC.xib │ │ │ ├── Model │ │ │ │ ├── FFDropDownCustomMenuStyle1Model.h │ │ │ │ └── FFDropDownCustomMenuStyle1Model.m │ │ │ └── View │ │ │ │ ├── FFDropDownCustomMenuStyle1Cell.h │ │ │ │ ├── FFDropDownCustomMenuStyle1Cell.m │ │ │ │ └── FFDropDownCustomMenuStyle1Cell.xib │ │ ├── 自定义菜单cell(xib) │ │ │ ├── Controller │ │ │ │ ├── FFDropDownMenuCustomXibCellVC.h │ │ │ │ ├── FFDropDownMenuCustomXibCellVC.m │ │ │ │ └── FFDropDownMenuCustomXibCellVC.xib │ │ │ ├── Model │ │ │ │ ├── FFDropDownMenuCustomXibCellModel.h │ │ │ │ └── FFDropDownMenuCustomXibCellModel.m │ │ │ └── View │ │ │ │ ├── FFDropDownMenuCustomXibCell.h │ │ │ │ ├── FFDropDownMenuCustomXibCell.m │ │ │ │ └── FFDropDownMenuCustomXibCell.xib │ │ └── 自定义菜单cell(非xib) │ │ │ ├── Controller │ │ │ ├── FFDropDownMenuCustomCellVC.h │ │ │ ├── FFDropDownMenuCustomCellVC.m │ │ │ └── FFDropDownMenuCustomCellVC.xib │ │ │ └── View │ │ │ ├── FFDropDownMenuCustomCell.h │ │ │ └── FFDropDownMenuCustomCell.m │ ├── Main(主界面) │ │ ├── Cell │ │ │ ├── FFExampleCell.h │ │ │ ├── FFExampleCell.m │ │ │ └── FFExampleCell.xib │ │ ├── Controller │ │ │ ├── FFMainNavigationController.h │ │ │ ├── FFMainNavigationController.m │ │ │ ├── FFMainViewController.h │ │ │ └── FFMainViewController.m │ │ └── Model │ │ │ ├── FFExampleModel.h │ │ │ └── FFExampleModel.m │ ├── Public(公共类) │ │ ├── Category │ │ │ ├── NSString+Extension.h │ │ │ ├── NSString+Extension.m │ │ │ ├── UIView+Extension.h │ │ │ ├── UIView+Extension.m │ │ │ ├── UIViewController+Extension.h │ │ │ ├── UIViewController+Extension.m │ │ │ ├── UIViewController+Swizzling.h │ │ │ └── UIViewController+Swizzling.m │ │ ├── Controller │ │ │ ├── FFNavigationController.h │ │ │ ├── FFNavigationController.m │ │ │ ├── FFTableViewController.h │ │ │ ├── FFTableViewController.m │ │ │ ├── FFViewController.h │ │ │ └── FFViewController.m │ │ ├── Other │ │ │ └── PrefixHeader.pch │ │ └── View │ │ │ ├── FFTableSectionHeaderView.h │ │ │ └── FFTableSectionHeaderView.m │ ├── Runtime │ │ └── 001_runtime监听 │ │ │ ├── Category │ │ │ ├── UIView+FFExtension.h │ │ │ └── UIView+FFExtension.m │ │ │ ├── Controller │ │ │ ├── FFRuntimeBaseController.h │ │ │ ├── FFRuntimeBaseController.m │ │ │ ├── FFRuntimeObserveController.h │ │ │ └── FFRuntimeObserveController.m │ │ │ └── View │ │ │ ├── FFCustomView.h │ │ │ ├── FFCustomView.m │ │ │ ├── FFProgressView.h │ │ │ └── FFProgressView.m │ ├── 程序入口 │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ └── main.m │ └── 自定义控件(绘图) │ │ ├── FFCustomViewCell.h │ │ ├── FFCustomViewCell.m │ │ ├── FFCustomViewController.h │ │ ├── FFCustomViewController.m │ │ └── 绘制直线 │ │ ├── FFDrawStraightLineView.h │ │ └── FFDrawStraightLineView.m └── Resources │ └── Plist文件 │ └── Info.plist ├── CollectionsOfExampleTests ├── CollectionsOfExampleTests.m └── Info.plist ├── CollectionsOfExampleUITests ├── CollectionsOfExampleUITests.m └── Info.plist ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── FFDropDownMenu │ ├── FFDropDownMenu │ │ ├── FFDropDownMenu.h │ │ ├── FFDropDownMenuBasedCell.h │ │ ├── FFDropDownMenuBasedCell.m │ │ ├── FFDropDownMenuBasedModel.h │ │ ├── FFDropDownMenuBasedModel.m │ │ ├── FFDropDownMenuCell.h │ │ ├── FFDropDownMenuCell.m │ │ ├── FFDropDownMenuModel.h │ │ ├── FFDropDownMenuModel.m │ │ ├── FFDropDownMenuTriangleView.h │ │ ├── FFDropDownMenuTriangleView.m │ │ ├── FFDropDownMenuView.h │ │ └── FFDropDownMenuView.m │ ├── LICENSE │ └── README.md ├── Headers │ ├── Private │ │ ├── FFDropDownMenu │ │ │ ├── FFDropDownMenu.h │ │ │ ├── FFDropDownMenuBasedCell.h │ │ │ ├── FFDropDownMenuBasedModel.h │ │ │ ├── FFDropDownMenuCell.h │ │ │ ├── FFDropDownMenuModel.h │ │ │ ├── FFDropDownMenuTriangleView.h │ │ │ └── FFDropDownMenuView.h │ │ └── UITableView+FDTemplateLayoutCell │ │ │ ├── UITableView+FDIndexPathHeightCache.h │ │ │ ├── UITableView+FDKeyedHeightCache.h │ │ │ ├── UITableView+FDTemplateLayoutCell.h │ │ │ └── UITableView+FDTemplateLayoutCellDebug.h │ └── Public │ │ ├── FFDropDownMenu │ │ ├── FFDropDownMenu.h │ │ ├── FFDropDownMenuBasedCell.h │ │ ├── FFDropDownMenuBasedModel.h │ │ ├── FFDropDownMenuCell.h │ │ ├── FFDropDownMenuModel.h │ │ ├── FFDropDownMenuTriangleView.h │ │ └── FFDropDownMenuView.h │ │ └── UITableView+FDTemplateLayoutCell │ │ ├── UITableView+FDIndexPathHeightCache.h │ │ ├── UITableView+FDKeyedHeightCache.h │ │ ├── UITableView+FDTemplateLayoutCell.h │ │ └── UITableView+FDTemplateLayoutCellDebug.h ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj ├── Target Support Files │ ├── FFDropDownMenu │ │ ├── FFDropDownMenu-dummy.m │ │ ├── FFDropDownMenu-prefix.pch │ │ └── FFDropDownMenu.xcconfig │ ├── Pods │ │ ├── Pods-acknowledgements.markdown │ │ ├── Pods-acknowledgements.plist │ │ ├── Pods-dummy.m │ │ ├── Pods-frameworks.sh │ │ ├── Pods-resources.sh │ │ ├── Pods.debug.xcconfig │ │ └── Pods.release.xcconfig │ └── UITableView+FDTemplateLayoutCell │ │ ├── UITableView+FDTemplateLayoutCell-dummy.m │ │ ├── UITableView+FDTemplateLayoutCell-prefix.pch │ │ └── UITableView+FDTemplateLayoutCell.xcconfig └── UITableView+FDTemplateLayoutCell │ ├── Classes │ ├── UITableView+FDIndexPathHeightCache.h │ ├── UITableView+FDIndexPathHeightCache.m │ ├── UITableView+FDKeyedHeightCache.h │ ├── UITableView+FDKeyedHeightCache.m │ ├── UITableView+FDTemplateLayoutCell.h │ ├── UITableView+FDTemplateLayoutCell.m │ ├── UITableView+FDTemplateLayoutCellDebug.h │ └── UITableView+FDTemplateLayoutCellDebug.m │ ├── LICENSE │ └── README.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | *.xcscheme 26 | 27 | ## Obj-C/Swift specific 28 | *.hmap 29 | *.ipa 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | # Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | # Carthage/Checkouts 43 | 44 | Carthage/Build 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 52 | 53 | fastlane/report.xml 54 | fastlane/screenshots 55 | 56 | #系统的.DS_Store 57 | .DS_Store -------------------------------------------------------------------------------- /CollectionsOfExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CollectionsOfExample.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CollectionsOfExample.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 04CE411D1D3B8BEB009ED3F3 16 | 17 | primary 18 | 19 | 20 | 04CE41361D3B8BEB009ED3F3 21 | 22 | primary 23 | 24 | 25 | 04CE41411D3B8BEB009ED3F3 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /CollectionsOfExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/pauseVoice.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pauseVoice.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/pauseVoice.imageset/pauseVoice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/pauseVoice.imageset/pauseVoice.jpg -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/playVoice.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "playVoice.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/playVoice.imageset/playVoice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/playVoice.imageset/playVoice.jpg -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/voice.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "voice.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/voice.imageset/voice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/001_语音播放文字内容图片素材/voice.imageset/voice.jpg -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/AVFoundation图片素材/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "demo_avatar_cook.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "demo_avatar_cook@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "demo_avatar_cook@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/demo_avatar_cook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/demo_avatar_cook.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/demo_avatar_cook@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/demo_avatar_cook@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/demo_avatar_cook@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_cook.imageset/demo_avatar_cook@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "demo_avatar_jobs.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "demo_avatar_jobs@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "demo_avatar_jobs@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/demo_avatar_jobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/demo_avatar_jobs.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/demo_avatar_jobs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/demo_avatar_jobs@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/demo_avatar_jobs@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_jobs.imageset/demo_avatar_jobs@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "demo_avatar_woz.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "demo_avatar_woz@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "demo_avatar_woz@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/demo_avatar_woz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/demo_avatar_woz.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/demo_avatar_woz@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/demo_avatar_woz@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/demo_avatar_woz@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/demo_avatar_woz.imageset/demo_avatar_woz@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "goldengate.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "goldengate@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x", 16 | "filename" : "goldengate@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/goldengate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/goldengate.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/goldengate@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/goldengate@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/goldengate@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/CoreBluetooth/goldengate.imageset/goldengate@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/snow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "snow.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/snow.imageset/snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/snow.imageset/snow.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/snow_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "snow_background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/snow_background.imageset/snow_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/002_雪花飘落效果/snow_background.imageset/snow_background.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "advertisement0.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement0.imageset/advertisement0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement0.imageset/advertisement0.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "advertisement1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement1.imageset/advertisement1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement1.imageset/advertisement1.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "advertisement2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement2.imageset/advertisement2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement2.imageset/advertisement2.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "advertisement3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement3.imageset/advertisement3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement3.imageset/advertisement3.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "advertisement4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement4.imageset/advertisement4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement4.imageset/advertisement4.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "advertisement5.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement5.imageset/advertisement5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/004_无限滚动轮播图素材/advertisement5.imageset/advertisement5.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/Example(例子)图片素材/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/QQHomeBg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "QQHomeBg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/QQHomeBg.imageset/QQHomeBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/QQHomeBg.imageset/QQHomeBg.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/QQIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "QQIcon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/QQIcon.imageset/QQIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/QQIcon.imageset/QQIcon.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/dropDownMenu_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "dropDownMenu_background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/dropDownMenu_background.imageset/dropDownMenu_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/dropDownMenu_background.imageset/dropDownMenu_background.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/icon_greenArror.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_greenArror.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/icon_greenArror.imageset/icon_greenArror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/icon_greenArror.imageset/icon_greenArror.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu0.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu0.imageset/menu0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu0.imageset/menu0.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu1.imageset/menu1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu1.imageset/menu1.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu2.imageset/menu2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu2.imageset/menu2.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu3.imageset/menu3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu3.imageset/menu3.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu4.imageset/menu4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu4.imageset/menu4.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu5.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu5.imageset/menu5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menu5.imageset/menu5.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menuBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menuBackground.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menuBackground.imageset/menuBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/menuBackground.imageset/menuBackground.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/nemuItem.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "nemuItem.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/nemuItem.imageset/nemuItem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/FFDropDownMenu/Images/nemuItem.imageset/nemuItem.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/logo/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/logo/exampleDefaultImg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "exampleDefaultImg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/logo/exampleDefaultImg.imageset/exampleDefaultImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/logo/exampleDefaultImg.imageset/exampleDefaultImg.png -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/logo/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CollectionsOfExample/Assets.xcassets/logo/logo.imageset/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Assets.xcassets/logo/logo.imageset/logo.png -------------------------------------------------------------------------------- /CollectionsOfExample/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /CollectionsOfExample/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/AVFoundation/001_语音播放文字内容/Controller/FFVoicePlayTextController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFVoicePlayTextController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/30. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 语音播放文字内容 12 | */ 13 | @interface FFVoicePlayTextController : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/中心模式(CBCentralManager)/Controller/FFCentralManagerModeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCentralManagerModeController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | 11 | /** 12 | * CoreBlueTooth 中心模式的基本用法控制器 13 | */ 14 | @interface FFCentralManagerModeController : FFViewController 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/中心模式(CBCentralManager)/Controller/FFCentralManagerModeController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCentralManagerModeController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCentralManagerModeController.h" 10 | 11 | @interface FFCentralManagerModeController () 12 | 13 | @end 14 | 15 | @implementation FFCentralManagerModeController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/外设模式(CBPeripheralManager)/Controller/FFPeripheralManagerModeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFPeripheralManagerModeController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * CoreBlueTooth 外设模式的基本用法控制器 12 | */ 13 | @interface FFPeripheralManagerModeController : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/外设模式(CBPeripheralManager)/Controller/FFPeripheralManagerModeController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFPeripheralManagerModeController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFPeripheralManagerModeController.h" 10 | 11 | @interface FFPeripheralManagerModeController () 12 | 13 | @end 14 | 15 | @implementation FFPeripheralManagerModeController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view from its nib. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/Controller/CBCentralManagerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CBCentralManagerController.h 3 | // CoreBluetooth_Demo 4 | // 5 | // Created by mac on 16/9/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "DemoMessagesViewController.h" 11 | 12 | //中心管理者控制器 13 | @interface CBCentralManagerController : DemoMessagesViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/Controller/CBPeripheralManagerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CBPeripheralManagerController.h 3 | // CoreBluetooth_Demo 4 | // 5 | // Created by mac on 16/9/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "DemoMessagesViewController.h" 11 | 12 | //外设管理者控制器 13 | @interface CBPeripheralManagerController : DemoMessagesViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/Controller/FFCoreBluetoothChatController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCoreBluetoothChatController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 聊天(CoreBluetooth实战1)控制器 12 | */ 13 | @interface FFCoreBluetoothChatController : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/Controller/FFCoreBluetoothChatController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCoreBluetoothChatController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCoreBluetoothChatController.h" 10 | #import "NSUserDefaults+DemoSettings.h" 11 | 12 | //contoller 13 | #import "CBCentralManagerController.h" 14 | #import "CBPeripheralManagerController.h" 15 | 16 | @interface FFCoreBluetoothChatController () 17 | 18 | @end 19 | 20 | @implementation FFCoreBluetoothChatController 21 | 22 | - (void)viewDidLoad { 23 | [super viewDidLoad]; 24 | 25 | } 26 | 27 | 28 | /** 中心模式按钮的点击 */ 29 | - (IBAction)centralModeBtnClick { 30 | CBCentralManagerController *vc = [CBCentralManagerController new]; 31 | [self.navigationController pushViewController:vc animated:YES]; 32 | } 33 | 34 | 35 | /** 外设模式按钮的点击 */ 36 | - (IBAction)peripheralModeBtnClick { 37 | CBPeripheralManagerController *vc = [CBPeripheralManagerController new]; 38 | [self.navigationController pushViewController:vc animated:YES]; 39 | } 40 | 41 | 42 | //================================================================= 43 | // other 44 | //================================================================= 45 | #pragma mark - other 46 | 47 | + (void)load { 48 | // Load our default settings 49 | [NSUserDefaults saveIncomingAvatarSetting:YES]; 50 | [NSUserDefaults saveOutgoingAvatarSetting:YES]; 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Base.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Load Earlier Messages"; 26 | 27 | "send" = "Send"; 28 | 29 | "new_message" = "New Message"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: media message"; 34 | 35 | "accessory_button_accessibility_label" = "Share media"; 36 | 37 | "new_message_received_accessibility_announcement" = "New message received"; -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min_tailless.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min_tailless.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min_tailless@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min_tailless@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min_tailless@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_min_tailless@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_regular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_regular.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_regular@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_regular@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_regular@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_regular@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked_tailless.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked_tailless.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked_tailless@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked_tailless@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked_tailless@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_stroked_tailless@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_tailless.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_tailless.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_tailless@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_tailless@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_tailless@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/bubble_tailless@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/clip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/clip.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/clip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/clip@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/clip@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/clip@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/pause.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/pause@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/pause@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/pause@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/play.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/play@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/play@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/share.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/share@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/share@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/share@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/typing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/typing.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/typing@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/typing@2x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/typing@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Images/typing@3x.png -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Sounds/message_received.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Sounds/message_received.aiff -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Sounds/message_sent.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/Sounds/message_sent.aiff -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/ar.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "تحميل الرسائل السابقة"; 26 | 27 | "send" = "أرسال"; 28 | 29 | "new_message" = "رسالة جديدة"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/bs.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Učitaj ranije poruke"; 26 | 27 | "send" = "Šalji"; 28 | 29 | "new_message" = "Nova poruka"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: medijska poruka"; 34 | 35 | "accessory_button_accessibility_label" = "Podijeli medij"; 36 | 37 | "new_message_received_accessibility_announcement" = "Primljena nova poruka"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/cs.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Načíst starší zprávy"; 26 | 27 | "send" = "Odeslat"; 28 | 29 | "new_message" = "Nová zpráva"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: multimediální zpráva"; 34 | 35 | "accessory_button_accessibility_label" = "Sdílet"; 36 | 37 | "new_message_received_accessibility_announcement" = "Přijata nová zpráva"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/da.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Indlæs tidligere beskeder"; 26 | 27 | "send" = "Send"; 28 | 29 | "new_message" = "Ny besked"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: mediebesked"; 34 | 35 | "accessory_button_accessibility_label" = "Del medie"; 36 | 37 | "new_message_received_accessibility_announcement" = "Ny besked modtaget"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/de.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Ältere Nachrichten laden"; 26 | 27 | "send" = "Senden"; 28 | 29 | "new_message" = "Neue Nachricht"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: media Nachricht"; 34 | 35 | "accessory_button_accessibility_label" = "Aktien media"; 36 | 37 | "new_message_received_accessibility_announcement" = "Neue Nachricht empfangen"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/en.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Load Earlier Messages"; 26 | 27 | "send" = "Send"; 28 | 29 | "new_message" = "New Message"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: media message"; 34 | 35 | "accessory_button_accessibility_label" = "Share media"; 36 | 37 | "new_message_received_accessibility_announcement" = "New message received"; -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/es.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Cargar mensajes anteriores"; 26 | 27 | "send" = "Enviar"; 28 | 29 | "new_message" = "Nuevo mensaje"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: imagen"; 34 | 35 | "accessory_button_accessibility_label" = "Intercambio de archivos"; 36 | 37 | "new_message_received_accessibility_announcement" = "mensaje recibido"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/fa.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localization provided by MasihTak under MIT license 3 | The Mac OS X and iOS localization experts. 4 | https://masihtak.com 5 | */ 6 | 7 | "accessory_button_accessibility_label" = "اشتراک رسانه"; 8 | 9 | "load_earlier_messages" = "بارگذاری پیام های قبلی"; 10 | 11 | "media_message_accessibility_label" = "%@: پیام رسانه ای"; 12 | 13 | "new_message" = "پیام جدید"; 14 | 15 | "new_message_received_accessibility_announcement" = "پیام جدید دریافت شد"; 16 | 17 | "send" = "ارسال"; 18 | 19 | "text_message_accessibility_label" = "%@: %@"; 20 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/fi.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Lataa aiempia viestejä"; 26 | 27 | "send" = "Lähetä"; 28 | 29 | "new_message" = "Uusi viesti"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/fr.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Messages précedents"; 26 | 27 | "send" = "Envoyer"; 28 | 29 | "new_message" = "Nouveau message"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: image"; 34 | 35 | "accessory_button_accessibility_label" = "Partager fichier"; 36 | 37 | "new_message_received_accessibility_announcement" = "Nouveau message reçu"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/he.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "טען הודעות קודמות"; 26 | 27 | "send" = "שלח"; 28 | 29 | "new_message" = "הודעה חדשה"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/hr.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Učitaj ranije poruke"; 26 | 27 | "send" = "Šalji"; 28 | 29 | "new_message" = "Nova poruka"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: medijska poruka"; 34 | 35 | "accessory_button_accessibility_label" = "Podijeli medij"; 36 | 37 | "new_message_received_accessibility_announcement" = "Primljena nova poruka"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/id.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Muat Pesan Sebelumnya"; 26 | 27 | "send" = "Kirim"; 28 | 29 | "new_message" = "Pesan Baru"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/it.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Carica messaggi precedenti"; 26 | 27 | "send" = "Invia"; 28 | 29 | "new_message" = "Nuovo Messaggio"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/ja.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "古いメッセージを読み込む"; 26 | 27 | "send" = "送信"; 28 | 29 | "new_message" = "新しいメッセージ"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/ko.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "이전 메시지 불러오기"; 26 | 27 | "send" = "전송"; 28 | 29 | "new_message" = "새로운 메시지"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/ms.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Muat Turun Mesej Lama"; 26 | 27 | "send" = "Hantar"; 28 | 29 | "new_message" = "Mesej Baru"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/nb.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Last tidligere beskjeder"; 26 | 27 | "send" = "Send"; 28 | 29 | "new_message" = "Ny melding"; 30 | 31 | "text_message_accessibility_label" = "%@: %@"; 32 | 33 | "media_message_accessibility_label" = "%@: mediamelding"; 34 | 35 | "accessory_button_accessibility_label" = "Del media"; 36 | 37 | "new_message_received_accessibility_announcement" = "Ny melding mottatt"; 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/nl.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Laad eerdere berichten"; 26 | 27 | "send" = "Stuur"; 28 | 29 | "new_message" = "Nieuw bericht"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/pl.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Otwórz wcześniejsze wiadomości"; 26 | 27 | "send" = "Wyślij"; 28 | 29 | "new_message" = "Nowa wiadomość"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/pt.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Carregar mensagens anteriores"; 26 | 27 | "send" = "Enviar"; 28 | 29 | "new_message" = "Nova Mensagem"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/ro.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Încărcați mesajele anterioare"; 26 | 27 | "send" = "Trimiteți"; 28 | 29 | "new_message" = "Mesaj nou"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/ru.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Предыдущие сообщения"; 26 | 27 | "send" = "Отпр"; 28 | 29 | "new_message" = "Сообщение"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/sv.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Visa tidigare meddelanden"; 26 | 27 | "send" = "Skicka"; 28 | 29 | "new_message" = "Nytt meddelande"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/th.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "โหลดข้อความก่อนหน้า"; 26 | 27 | "send" = "ส่ง"; 28 | 29 | "new_message" = "ข้อความใหม่"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/tr.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Eski mesajları yükle"; 26 | 27 | "send" = "Gönder"; 28 | 29 | "new_message" = "Yeni Mesaj"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/vi.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "Tải thêm tin nhắn"; 26 | 27 | "send" = "Gửi"; 28 | 29 | "new_message" = "Tin nhắn mới"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/zh-Hans.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "载入较早的信息"; 26 | 27 | "send" = "发送"; 28 | 29 | "new_message" = "新信息"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Assets/JSQMessagesAssets.bundle/zh-Hant.lproj/JSQMessages.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | // ******************************** 20 | // Special thanks to the localization contributors! 21 | // 22 | // https://github.com/jessesquires/JSQMessagesViewController/issues/237 23 | // ******************************** 24 | 25 | "load_earlier_messages" = "載入之前的訊息"; 26 | 27 | "send" = "傳送"; 28 | 29 | "new_message" = "新信息"; 30 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Categories/NSBundle+JSQMessages.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | NS_ASSUME_NONNULL_BEGIN 22 | 23 | @interface NSBundle (JSQMessages) 24 | 25 | /** 26 | * @return The bundle for JSQMessagesViewController. 27 | */ 28 | + (NSBundle *)jsq_messagesBundle; 29 | 30 | /** 31 | * @return The bundle for assets in JSQMessagesViewController. 32 | */ 33 | + (NSBundle *)jsq_messagesAssetBundle; 34 | 35 | /** 36 | * Returns a localized version of the string designated by the specified key and residing in the JSQMessages table. 37 | * 38 | * @param key The key for a string in the JSQMessages table. 39 | * 40 | * @return A localized version of the string designated by key in the JSQMessages table. 41 | */ 42 | + (nullable NSString *)jsq_localizedStringForKey:(NSString *)key; 43 | 44 | @end 45 | 46 | NS_ASSUME_NONNULL_END 47 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Categories/NSBundle+JSQMessages.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "NSBundle+JSQMessages.h" 20 | 21 | #import "JSQMessagesViewController.h" 22 | 23 | @implementation NSBundle (JSQMessages) 24 | 25 | + (NSBundle *)jsq_messagesBundle 26 | { 27 | return [NSBundle bundleForClass:[JSQMessagesViewController class]]; 28 | } 29 | 30 | + (NSBundle *)jsq_messagesAssetBundle 31 | { 32 | NSString *bundleResourcePath = [NSBundle jsq_messagesBundle].resourcePath; 33 | NSString *assetPath = [bundleResourcePath stringByAppendingPathComponent:@"JSQMessagesAssets.bundle"]; 34 | return [NSBundle bundleWithPath:assetPath]; 35 | } 36 | 37 | + (NSString *)jsq_localizedStringForKey:(NSString *)key 38 | { 39 | return NSLocalizedStringFromTableInBundle(key, @"JSQMessages", [NSBundle jsq_messagesAssetBundle], nil); 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Categories/NSString+JSQMessages.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | NS_ASSUME_NONNULL_BEGIN 22 | 23 | @interface NSString (JSQMessages) 24 | 25 | /** 26 | * @return A copy of the receiver with all leading and trailing whitespace removed. 27 | */ 28 | - (NSString *)jsq_stringByTrimingWhitespace; 29 | 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Categories/NSString+JSQMessages.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "NSString+JSQMessages.h" 20 | 21 | @implementation NSString (JSQMessages) 22 | 23 | - (NSString *)jsq_stringByTrimingWhitespace 24 | { 25 | return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Categories/UIView+JSQMessages.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | NS_ASSUME_NONNULL_BEGIN 22 | 23 | @interface UIView (JSQMessages) 24 | 25 | /** 26 | * Pins the subview of the receiver to the edge of its frame, as specified by the given attribute, by adding a layout constraint. 27 | * 28 | * @param subview The subview to which the receiver will be pinned. 29 | * @param attribute The layout constraint attribute specifying one of `NSLayoutAttributeBottom`, `NSLayoutAttributeTop`, `NSLayoutAttributeLeading`, `NSLayoutAttributeTrailing`. 30 | */ 31 | - (void)jsq_pinSubview:(UIView *)subview toEdge:(NSLayoutAttribute)attribute; 32 | 33 | /** 34 | * Pins all edges of the specified subview to the receiver. 35 | * 36 | * @param subview The subview to which the receiver will be pinned. 37 | */ 38 | - (void)jsq_pinAllEdgesOfSubview:(UIView *)subview; 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Categories/UIView+JSQMessages.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "UIView+JSQMessages.h" 20 | 21 | @implementation UIView (JSQMessages) 22 | 23 | - (void)jsq_pinSubview:(UIView *)subview toEdge:(NSLayoutAttribute)attribute 24 | { 25 | [self addConstraint:[NSLayoutConstraint constraintWithItem:self 26 | attribute:attribute 27 | relatedBy:NSLayoutRelationEqual 28 | toItem:subview 29 | attribute:attribute 30 | multiplier:1.0f 31 | constant:0.0f]]; 32 | } 33 | 34 | - (void)jsq_pinAllEdgesOfSubview:(UIView *)subview 35 | { 36 | [self jsq_pinSubview:subview toEdge:NSLayoutAttributeBottom]; 37 | [self jsq_pinSubview:subview toEdge:NSLayoutAttributeTop]; 38 | [self jsq_pinSubview:subview toEdge:NSLayoutAttributeLeading]; 39 | [self jsq_pinSubview:subview toEdge:NSLayoutAttributeTrailing]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Layout/JSQMessagesBubblesSizeCalculator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | #import "JSQMessagesBubbleSizeCalculating.h" 22 | 23 | NS_ASSUME_NONNULL_BEGIN 24 | 25 | /** 26 | * An instance of `JSQMessagesBubblesSizeCalculator` is responsible for calculating 27 | * message bubble sizes for an instance of `JSQMessagesCollectionViewFlowLayout`. 28 | */ 29 | @interface JSQMessagesBubblesSizeCalculator : NSObject 30 | 31 | /** 32 | * Initializes and returns a bubble size calculator with the given cache and minimumBubbleWidth. 33 | * 34 | * @param cache A cache object used to store layout information. 35 | * @param minimumBubbleWidth The minimum width for any given message bubble. 36 | * @param usesFixedWidthBubbles Specifies whether or not to use fixed-width bubbles. 37 | * If `NO` (the default), then bubbles will resize when rotating to landscape. 38 | * 39 | * @return An initialized `JSQMessagesBubblesSizeCalculator`. 40 | */ 41 | - (nullable instancetype)initWithCache:(nonnull NSCache *)cache 42 | minimumBubbleWidth:(NSUInteger)minimumBubbleWidth 43 | usesFixedWidthBubbles:(BOOL)usesFixedWidthBubbles NS_DESIGNATED_INITIALIZER; 44 | 45 | @end 46 | 47 | NS_ASSUME_NONNULL_END 48 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Layout/JSQMessagesCollectionViewFlowLayoutInvalidationContext.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMessagesCollectionViewFlowLayoutInvalidationContext.h" 20 | 21 | @implementation JSQMessagesCollectionViewFlowLayoutInvalidationContext 22 | 23 | #pragma mark - Initialization 24 | 25 | - (instancetype)init 26 | { 27 | self = [super init]; 28 | if (self) { 29 | self.invalidateFlowLayoutDelegateMetrics = NO; 30 | self.invalidateFlowLayoutAttributes = NO; 31 | _invalidateFlowLayoutMessagesCache = NO; 32 | } 33 | return self; 34 | } 35 | 36 | + (instancetype)context 37 | { 38 | JSQMessagesCollectionViewFlowLayoutInvalidationContext *context = [[JSQMessagesCollectionViewFlowLayoutInvalidationContext alloc] init]; 39 | context.invalidateFlowLayoutDelegateMetrics = YES; 40 | context.invalidateFlowLayoutAttributes = YES; 41 | return context; 42 | } 43 | 44 | #pragma mark - NSObject 45 | 46 | - (NSString *)description 47 | { 48 | return [NSString stringWithFormat:@"<%@: invalidateFlowLayoutDelegateMetrics=%@, invalidateFlowLayoutAttributes=%@, invalidateDataSourceCounts=%@, invalidateFlowLayoutMessagesCache=%@>", 49 | [self class], @(self.invalidateFlowLayoutDelegateMetrics), @(self.invalidateFlowLayoutAttributes), @(self.invalidateDataSourceCounts), @(self.invalidateFlowLayoutMessagesCache)]; 50 | } 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Model/JSQMessageBubbleImageDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | #import 21 | 22 | NS_ASSUME_NONNULL_BEGIN 23 | 24 | /** 25 | * The `JSQMessageBubbleImageDataSource` protocol defines the common interface through which 26 | * a `JSQMessagesViewController` and `JSQMessagesCollectionView` interact with 27 | * message bubble image model objects. 28 | * 29 | * It declares the required and optional methods that a class must implement so that instances 30 | * of that class can be display properly within a `JSQMessagesCollectionViewCell`. 31 | * 32 | * A concrete class that conforms to this protocol is provided in the library. See `JSQMessagesBubbleImage`. 33 | * 34 | * @see JSQMessagesBubbleImage. 35 | */ 36 | @protocol JSQMessageBubbleImageDataSource 37 | 38 | @required 39 | 40 | /** 41 | * @return The message bubble image for a regular display state. 42 | * 43 | * @warning You must not return `nil` from this method. 44 | */ 45 | - (UIImage *)messageBubbleImage; 46 | 47 | /** 48 | * @return The message bubble image for a highlighted display state. 49 | * 50 | * @warning You must not return `nil` from this method. 51 | */ 52 | - (UIImage *)messageBubbleHighlightedImage; 53 | 54 | @end 55 | 56 | NS_ASSUME_NONNULL_END 57 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Model/JSQMessagesViewAccessoryButtonDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // Documentation 6 | // http://cocoadocs.org/docsets/JSQMessagesViewController 7 | // 8 | // 9 | // GitHub 10 | // https://github.com/jessesquires/JSQMessagesViewController 11 | // 12 | // 13 | // License 14 | // Copyright (c) 2014 Jesse Squires 15 | // Released under an MIT license: http://opensource.org/licenses/MIT 16 | // 17 | 18 | #import 19 | 20 | NS_ASSUME_NONNULL_BEGIN 21 | 22 | @class JSQMessagesCollectionView; 23 | 24 | /** 25 | * The `JSQMessagesViewAccessoryButtonDelegate` protocol defines methods that allow you to 26 | * handle accessory actions for the collection view. 27 | */ 28 | @protocol JSQMessagesViewAccessoryButtonDelegate 29 | 30 | @required 31 | 32 | /** 33 | * Notifies the delegate that the accessory button at the specified indexPath did receive a tap event. 34 | * 35 | * @param messageView The collection view object that is notifying the delegate of the tap event. 36 | * @param path The index path of the item for which the accessory button was tapped. 37 | */ 38 | - (void)messageView:(JSQMessagesCollectionView *)messageView didTapAccessoryButtonAtIndexPath:(NSIndexPath *)path; 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Model/JSQPhotoMediaItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMediaItem.h" 20 | 21 | NS_ASSUME_NONNULL_BEGIN 22 | 23 | /** 24 | * The `JSQPhotoMediaItem` class is a concrete `JSQMediaItem` subclass that implements the `JSQMessageMediaData` protocol 25 | * and represents a photo media message. An initialized `JSQPhotoMediaItem` object can be passed 26 | * to a `JSQMediaMessage` object during its initialization to construct a valid media message object. 27 | * You may wish to subclass `JSQPhotoMediaItem` to provide additional functionality or behavior. 28 | */ 29 | @interface JSQPhotoMediaItem : JSQMediaItem 30 | 31 | /** 32 | * The image for the photo media item. The default value is `nil`. 33 | */ 34 | @property (copy, nonatomic, nullable) UIImage *image; 35 | 36 | /** 37 | * Initializes and returns a photo media item object having the given image. 38 | * 39 | * @param image The image for the photo media item. This value may be `nil`. 40 | * 41 | * @return An initialized `JSQPhotoMediaItem`. 42 | * 43 | * @discussion If the image must be dowloaded from the network, 44 | * you may initialize a `JSQPhotoMediaItem` object with a `nil` image. 45 | * Once the image has been retrieved, you can then set the image property. 46 | */ 47 | - (instancetype)initWithImage:(nullable UIImage *)image; 48 | 49 | @end 50 | 51 | NS_ASSUME_NONNULL_END 52 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesCellTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | /** 22 | * `JSQMessagesCellTextView` is a subclass of `UITextView` that is used to display text 23 | * in a `JSQMessagesCollectionViewCell`. 24 | */ 25 | @interface JSQMessagesCellTextView : UITextView 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesCollectionViewCellIncoming.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMessagesCollectionViewCell.h" 20 | 21 | /** 22 | * A `JSQMessagesCollectionViewCellIncoming` object is a concrete instance 23 | * of `JSQMessagesCollectionViewCell` that represents an incoming message data item. 24 | */ 25 | @interface JSQMessagesCollectionViewCellIncoming : JSQMessagesCollectionViewCell 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesCollectionViewCellIncoming.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMessagesCollectionViewCellIncoming.h" 20 | 21 | @implementation JSQMessagesCollectionViewCellIncoming 22 | 23 | #pragma mark - Overrides 24 | 25 | - (void)awakeFromNib 26 | { 27 | [super awakeFromNib]; 28 | self.messageBubbleTopLabel.textAlignment = NSTextAlignmentLeft; 29 | self.cellBottomLabel.textAlignment = NSTextAlignmentLeft; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesCollectionViewCellOutgoing.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMessagesCollectionViewCell.h" 20 | 21 | /** 22 | * A `JSQMessagesCollectionViewCellOutgoing` object is a concrete instance 23 | * of `JSQMessagesCollectionViewCell` that represents an outgoing message data item. 24 | */ 25 | @interface JSQMessagesCollectionViewCellOutgoing : JSQMessagesCollectionViewCell 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesCollectionViewCellOutgoing.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMessagesCollectionViewCellOutgoing.h" 20 | 21 | @implementation JSQMessagesCollectionViewCellOutgoing 22 | 23 | #pragma mark - Overrides 24 | 25 | - (void)awakeFromNib 26 | { 27 | [super awakeFromNib]; 28 | self.messageBubbleTopLabel.textAlignment = NSTextAlignmentRight; 29 | self.cellBottomLabel.textAlignment = NSTextAlignmentRight; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | /** 22 | * `JSQMessagesLabel` is a subclass of `UILabel` that adds support for a `textInsets` property, 23 | * which is similar to the `textContainerInset` property of `UITextView`. 24 | */ 25 | @interface JSQMessagesLabel : UILabel 26 | 27 | /** 28 | * The inset of the text layout area within the label's content area. The default value is `UIEdgeInsetsZero`. 29 | * 30 | * @discussion This property provides text margins for the text laid out in the label. 31 | * The inset values provided must be greater than or equal to `0.0f`. 32 | */ 33 | @property (assign, nonatomic) UIEdgeInsets textInsets; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import "JSQMessagesLabel.h" 20 | 21 | @implementation JSQMessagesLabel 22 | 23 | #pragma mark - Initialization 24 | 25 | - (void)jsq_configureLabel 26 | { 27 | [self setTranslatesAutoresizingMaskIntoConstraints:NO]; 28 | self.textInsets = UIEdgeInsetsZero; 29 | } 30 | 31 | - (instancetype)initWithFrame:(CGRect)frame 32 | { 33 | self = [super initWithFrame:frame]; 34 | if (self) { 35 | [self jsq_configureLabel]; 36 | } 37 | return self; 38 | } 39 | 40 | - (void)awakeFromNib 41 | { 42 | [super awakeFromNib]; 43 | [self jsq_configureLabel]; 44 | } 45 | 46 | #pragma mark - Setters 47 | 48 | - (void)setTextInsets:(UIEdgeInsets)textInsets 49 | { 50 | if (UIEdgeInsetsEqualToEdgeInsets(_textInsets, textInsets)) { 51 | return; 52 | } 53 | 54 | _textInsets = textInsets; 55 | [self setNeedsDisplay]; 56 | } 57 | 58 | #pragma mark - Drawing 59 | 60 | - (void)drawTextInRect:(CGRect)rect 61 | { 62 | [super drawTextInRect:CGRectMake(CGRectGetMinX(rect) + self.textInsets.left, 63 | CGRectGetMinY(rect) + self.textInsets.top, 64 | CGRectGetWidth(rect) - self.textInsets.right, 65 | CGRectGetHeight(rect) - self.textInsets.bottom)]; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/JSQMessagesViewController(请忽略我)/Views/JSQMessagesTypingView.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | // TODO: write documentation 22 | // 23 | // https://github.com/jessesquires/JSQMessagesViewController/issues/1647 24 | // 25 | 26 | NS_ASSUME_NONNULL_BEGIN 27 | 28 | @interface JSQMessagesTypingView : UIView 29 | 30 | @property (strong, nonatomic) UIColor *dotsColor; 31 | 32 | @property (strong, nonatomic) UIColor *animateToColor; 33 | 34 | @property (assign, nonatomic) CGFloat animationDuration; 35 | 36 | @property (assign, nonatomic) BOOL animated; 37 | 38 | @end 39 | 40 | NS_ASSUME_NONNULL_END 41 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/MessageBasedViewController(请忽略我)/DemoMessagesViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | 20 | // Import all the things 21 | #import "JSQMessages.h" 22 | 23 | #import "DemoModelData.h" 24 | #import "NSUserDefaults+DemoSettings.h" 25 | 26 | 27 | @class DemoMessagesViewController; 28 | 29 | @protocol JSQDemoViewControllerDelegate 30 | 31 | - (void)didDismissJSQDemoViewController:(DemoMessagesViewController *)vc; 32 | 33 | 34 | 35 | @end 36 | 37 | 38 | 39 | 40 | @interface DemoMessagesViewController : JSQMessagesViewController 41 | 42 | @property (weak, nonatomic) id delegateModal; 43 | 44 | @property (strong, nonatomic) DemoModelData *demoData; 45 | 46 | - (void)receiveMessagePressed:(UIBarButtonItem *)sender; 47 | 48 | - (void)closePressed:(UIBarButtonItem *)sender; 49 | 50 | - (void)receiveMessage:(NSString *)message senderId:(NSString *)senderId senderName:(NSString *)senderName; 51 | 52 | /** 菊花 */ 53 | @property (nonatomic, weak) UIActivityIndicatorView *activityIndicatorView; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/MessageBasedViewController(请忽略我)/NSUserDefaults+DemoSettings.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Jesse Squires 3 | // http://www.jessesquires.com 4 | // 5 | // 6 | // Documentation 7 | // http://cocoadocs.org/docsets/JSQMessagesViewController 8 | // 9 | // 10 | // GitHub 11 | // https://github.com/jessesquires/JSQMessagesViewController 12 | // 13 | // 14 | // License 15 | // Copyright (c) 2014 Jesse Squires 16 | // Released under an MIT license: http://opensource.org/licenses/MIT 17 | // 18 | 19 | #import 20 | 21 | @interface NSUserDefaults (DemoSettings) 22 | 23 | + (void)saveExtraMessagesSetting:(BOOL)value; 24 | + (BOOL)extraMessagesSetting; 25 | 26 | + (void)saveLongMessageSetting:(BOOL)value; 27 | + (BOOL)longMessageSetting; 28 | 29 | + (void)saveEmptyMessagesSetting:(BOOL)value; 30 | + (BOOL)emptyMessagesSetting; 31 | 32 | + (void)saveSpringinessSetting:(BOOL)value; 33 | + (BOOL)springinessSetting; 34 | 35 | + (void)saveOutgoingAvatarSetting:(BOOL)value; 36 | + (BOOL)outgoingAvatarSetting; 37 | 38 | + (void)saveIncomingAvatarSetting:(BOOL)value; 39 | + (BOOL)incomingAvatarSetting; 40 | 41 | + (void)saveAccessoryButtonForMediaMessages:(BOOL)value; 42 | + (BOOL)accessoryButtonForMediaMessages; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/MessageBasedViewController(请忽略我)/jsq_messages_sample.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenfanfang/CollectionsOfExample/d05a75425e2615b20b7256ca2dca0b30ccaa6fab/CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/MessageBasedViewController(请忽略我)/jsq_messages_sample.m4a -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/Model/FFChatMessageModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFChatMessageModel.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/19. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * 消息的方向类型 13 | */ 14 | typedef NS_ENUM(NSUInteger, FFMessageDirectionType) { 15 | /** 16 | * 发送消息 17 | */ 18 | FFMessageDirectionTypeSend = 0, 19 | /** 20 | * 接收消息 21 | */ 22 | FFMessageDirectionTypeReceive 23 | }; 24 | 25 | 26 | /** 27 | * 聊天的信息模型 28 | */ 29 | @interface FFChatMessageModel : NSObject 30 | 31 | /** 消息的方向类型 */ 32 | @property (nonatomic, assign) FFMessageDirectionType messageDirectionType; 33 | 34 | /** 消息内容 */ 35 | @property (nonatomic, copy) NSString *message; 36 | 37 | /** 头像 */ 38 | @property (nonatomic, copy) NSString *headerImageName; 39 | 40 | @end 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/Model/FFChatMessageModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFChatMessageModel.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/19. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFChatMessageModel.h" 10 | 11 | @implementation FFChatMessageModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/View/FFChatReceiveMessageCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFChatReceiveMessageCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/19. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFChatReceiveMessageCell : UITableViewCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/View/FFChatReceiveMessageCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFChatReceiveMessageCell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/19. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFChatReceiveMessageCell.h" 10 | 11 | @implementation FFChatReceiveMessageCell 12 | 13 | - (void)awakeFromNib { 14 | // Initialization code 15 | } 16 | 17 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 18 | [super setSelected:selected animated:animated]; 19 | 20 | // Configure the view for the selected state 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/View/FFChatSendMessageCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFChatSendMessageCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/19. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | @class FFChatMessageModel; 11 | 12 | @interface FFChatSendMessageCell : UITableViewCell 13 | 14 | /** 消息模型 */ 15 | @property (nonatomic, strong) FFChatMessageModel *messageModel; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/View/FFChatSendMessageCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFChatSendMessageCell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/19. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFChatSendMessageCell.h" 10 | 11 | //model 12 | #import "FFChatMessageModel.h" 13 | 14 | @interface FFChatSendMessageCell () 15 | 16 | @property (weak, nonatomic) IBOutlet UIImageView *icon_ImageView; 17 | 18 | @property (weak, nonatomic) IBOutlet UILabel *message_Label; 19 | 20 | @property (weak, nonatomic) IBOutlet UILabel *time_Label; 21 | 22 | 23 | @end 24 | 25 | @implementation FFChatSendMessageCell 26 | 27 | - (void)setMessageModel:(FFChatMessageModel *)messageModel { 28 | _messageModel = messageModel; 29 | 30 | self.message_Label.text = messageModel.message; 31 | 32 | } 33 | 34 | - (void)awakeFromNib { 35 | // Initialization code 36 | } 37 | 38 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 39 | [super setSelected:selected animated:animated]; 40 | 41 | // Configure the view for the selected state 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/CoreBluetooth(蓝牙)/聊天(CorBluetooth实战1)/View/FFCustomWithPlaceHolderTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomWithPlaceHolderTextView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/9/18. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * 自定义带占位文字的TextView 13 | */ 14 | @interface FFCustomWithPlaceHolderTextView : UITextView 15 | 16 | /** 占位文本label */ 17 | @property (nonatomic, strong) UILabel *placedLabel; 18 | 19 | /** 文字变化的block */ 20 | @property (nonatomic, copy) void(^textChangedBlock)(NSString *text); 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/001_不同宽度的标签/Cell/FFDifferentWidthTagCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDifferentWidthTagCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | @class FFDifferentWidthTagModel; 11 | 12 | @interface FFDifferentWidthTagCell : UITableViewCell 13 | 14 | /** 不同宽度标签的模型 */ 15 | @property (nonatomic, strong)FFDifferentWidthTagModel *tagModel; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/001_不同宽度的标签/Controller/FFDifferentWidthTagVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDifferentWidthTagVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | 11 | /** 12 | * 不同宽度的标签 13 | */ 14 | @interface FFDifferentWidthTagVC : FFViewController 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/001_不同宽度的标签/Model/FFDifferentWidthTagModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDifferentWidthTagModel.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * 不同宽度标签的模型 13 | */ 14 | @interface FFDifferentWidthTagModel : NSObject 15 | 16 | /** 标签数组 */ 17 | @property (nonatomic, strong) NSMutableArray *tagsArrM; 18 | 19 | /** 标签数组对应label的frame 数组 */ 20 | @property (nonatomic, strong) NSMutableArray *tagsLabelFramesM; 21 | 22 | /** 名字 */ 23 | @property (nonatomic, copy) NSString *name; 24 | 25 | /** cell的高度 */ 26 | @property (nonatomic, assign) CGFloat cellHeight; 27 | 28 | 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/002_雪花飘落效果/Controller/FFSnowflakesFallingVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFSnowflakesFallingVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/30. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 雪花飘落效果控制器 12 | */ 13 | @interface FFSnowflakesFallingVC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/002_雪花飘落效果/Controller/FFSnowflakesFallingVC.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFSnowflakesFallingVC.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/30. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFSnowflakesFallingVC.h" 10 | 11 | //view 12 | #import "FFSnowflakesFallingView.h" 13 | 14 | @interface FFSnowflakesFallingVC () 15 | 16 | @end 17 | 18 | @implementation FFSnowflakesFallingVC 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | 23 | self.navigationItem.title = @"雪花飘落效果"; 24 | 25 | //创建雪花飘落效果的view 26 | FFSnowflakesFallingView *snowflakesFallingView = [FFSnowflakesFallingView snowflakesFallingViewWithBackgroundImageName:@"snow_background" snowImageName:@"snow" frame:self.view.bounds]; 27 | [snowflakesFallingView beginSnow]; 28 | 29 | [self.view addSubview:snowflakesFallingView]; 30 | } 31 | 32 | 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/002_雪花飘落效果/View/FFSnowflakesFallingView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFSnowflakesFallingView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/30. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * 雪花飘落效果的view 13 | */ 14 | @interface FFSnowflakesFallingView : UIView 15 | 16 | /** 17 | * 快速创建一个雪花飘落效果的view 18 | * 19 | * @param bgImageName 背景图片的名称 20 | * @param snowImageName 雪花图片的名称 21 | * @param frame frame 22 | * 23 | * @return 实例化的 雪花飘落效果的view 24 | */ 25 | + (instancetype)snowflakesFallingViewWithBackgroundImageName:(NSString *)bgImageName snowImageName:(NSString *)snowImageName frame:(CGRect)frame; 26 | 27 | /** 开始下雪 */ 28 | - (void)beginSnow; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/003_正则表达式Demo/Controller/FFRegulationExpressDemoVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFRegulationExpressVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 正则表达式demo控制器 12 | */ 13 | @interface FFRegulationExpressDemoVC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/004_无限滚动轮播图/Controller/FFCircleScrollPhotoVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCircleScrollPhotoVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 无限滚动轮播图控制器 12 | */ 13 | @interface FFCircleScrollPhotoVC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/004_无限滚动轮播图/Controller/FFCircleScrollPhotoVC.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCircleScrollPhotoVC.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCircleScrollPhotoVC.h" 10 | 11 | //view 12 | #import "FFCircleScrollPhotoView.h" 13 | 14 | @interface FFCircleScrollPhotoVC () 15 | 16 | /** 图片名称数组 */ 17 | @property (nonatomic, strong) NSArray *imageNamesArr; 18 | 19 | 20 | 21 | @end 22 | 23 | @implementation FFCircleScrollPhotoVC 24 | 25 | - (void)viewDidLoad { 26 | [super viewDidLoad]; 27 | 28 | self.view.backgroundColor = [UIColor colorWithRed:138 / 255.0 green:43 / 255.0 blue:226 / 155.0 alpha:1.0]; 29 | self.navigationItem.title = @"无限滚动轮播图"; 30 | 31 | 32 | CGRect frame = CGRectMake(0, 150, self.view.bounds.size.width, 250); 33 | //创建轮播图 34 | FFCircleScrollPhotoView *view = [FFCircleScrollPhotoView circleScrollPhotoViewWithFrame:frame imageNames:self.imageNamesArr timerInterval:3]; 35 | 36 | [self.view addSubview:view]; 37 | 38 | } 39 | 40 | /***********************************懒加载***********************************/ 41 | #pragma mark - 懒加载 42 | - (NSArray *)imageNamesArr { 43 | if (_imageNamesArr == nil) { 44 | _imageNamesArr = @[ 45 | @"advertisement0", 46 | @"advertisement1", 47 | @"advertisement2", 48 | @"advertisement3", 49 | @"advertisement4", 50 | @"advertisement5", 51 | ]; 52 | } 53 | return _imageNamesArr; 54 | } 55 | 56 | 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/004_无限滚动轮播图/View/FFCircleScrollPhotoCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCircleScrollPhotoCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 无限滚动轮播图cell 12 | */ 13 | @interface FFCircleScrollPhotoCell : UICollectionViewCell 14 | 15 | /** 图片的名称 */ 16 | @property (nonatomic, copy) NSString *imageName; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/004_无限滚动轮播图/View/FFCircleScrollPhotoCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCircleScrollPhotoCell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCircleScrollPhotoCell.h" 10 | 11 | @interface FFCircleScrollPhotoCell () 12 | 13 | /** 广告图片的 imageView */ 14 | @property (weak, nonatomic) IBOutlet UIImageView *adPictureView; 15 | 16 | @end 17 | 18 | @implementation FFCircleScrollPhotoCell 19 | 20 | - (void)setImageName:(NSString *)imageName { 21 | _imageName = imageName; 22 | self.adPictureView.image = [UIImage imageNamed:imageName]; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/004_无限滚动轮播图/View/FFCircleScrollPhotoView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCircleScrollPhotoView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 无限滚动轮播图view 12 | */ 13 | @interface FFCircleScrollPhotoView : UIView 14 | 15 | /** 16 | * 快速实例化一个无限轮播图对象 17 | * 18 | * @param frame frame 19 | * @param imageNames 图片名称数组 20 | * @param timerInterval 定时器的多久换一张图 21 | * 22 | * @return 实例化的无限轮播图对象 23 | */ 24 | + (instancetype)circleScrollPhotoViewWithFrame:(CGRect)frame imageNames:(NSArray *)imageNames timerInterval:(CGFloat)timerInterval; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/006_UIWindow的巧用,点击状态栏滚动到最顶部/Controller/FFUIWindowUsage_ClickStatusBarScrollToTopVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFUIWindowUsage_ClickStatusBarScrollToTopVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * UIWindow的巧用 12 | * 点击状态栏、scrollView自动滚动到顶部 13 | */ 14 | @interface FFUIWindowUsage_ClickStatusBarScrollToTopVC : FFViewController 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/006_UIWindow的巧用,点击状态栏滚动到最顶部/Controller/FFUIWindowUsage_ClickStatusBarScrollToTopVC.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFUIWindowUsage_ClickStatusBarScrollToTopVC.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFUIWindowUsage_ClickStatusBarScrollToTopVC.h" 10 | 11 | //controller 12 | #import "FFUIWindowUsage_SingleScrollViewVC.h" 13 | #import "FFUIWindowUsage_MultipleScrollView.h" 14 | 15 | 16 | 17 | @interface FFUIWindowUsage_ClickStatusBarScrollToTopVC () 18 | 19 | @end 20 | 21 | @implementation FFUIWindowUsage_ClickStatusBarScrollToTopVC 22 | 23 | - (void)viewDidLoad { 24 | [super viewDidLoad]; 25 | 26 | } 27 | 28 | 29 | /** 1、查看只有一个scrollView的效果 */ 30 | - (IBAction)singleScrollViewBtnClick { 31 | FFUIWindowUsage_SingleScrollViewVC *vc = [FFUIWindowUsage_SingleScrollViewVC new]; 32 | vc.sectionHeaderTitle = @"只有一个scrollView"; 33 | [self.navigationController pushViewController:vc animated:YES]; 34 | } 35 | 36 | 37 | /** 2、查看有多个ScrollView不做处理的效果 */ 38 | - (IBAction)multipleScrollViewNoDealwithBtn { 39 | FFUIWindowUsage_MultipleScrollViewVC *vc = [FFUIWindowUsage_MultipleScrollViewVC new]; 40 | vc.dealwithStatusBarClick = NO; 41 | [self.navigationController pushViewController:vc animated:YES]; 42 | } 43 | 44 | 45 | /** 3、查看有多个ScrollView已经做过处理的效果 */ 46 | - (IBAction)multipleScrollViewDealwithBtn { 47 | FFUIWindowUsage_MultipleScrollViewVC *vc = [FFUIWindowUsage_MultipleScrollViewVC new]; 48 | vc.dealwithStatusBarClick = YES; 49 | [self.navigationController pushViewController:vc animated:YES]; 50 | } 51 | 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/006_UIWindow的巧用,点击状态栏滚动到最顶部/Controller/FFUIWindowUsage_MultipleScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFUIWindowUsage_ MultipleScrollView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * UIWindow的用法:有多个scrollView的控制器 12 | */ 13 | @interface FFUIWindowUsage_MultipleScrollViewVC : FFViewController 14 | 15 | /** 是否需要处理statusBar的点击 */ 16 | @property (nonatomic, assign) BOOL dealwithStatusBarClick; 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/006_UIWindow的巧用,点击状态栏滚动到最顶部/Controller/FFUIWindowUsage_SingleScrollViewVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFUIWindowUsage_SingleScrollView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * UIWindow的用法:只有一个scrollView的控制器 12 | */ 13 | @interface FFUIWindowUsage_SingleScrollViewVC : FFViewController 14 | 15 | /** sectionHeader标题 */ 16 | @property (nonatomic, copy) NSString *sectionHeaderTitle; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Example(例子)/006_UIWindow的巧用,点击状态栏滚动到最顶部/Tools/FFClickStatusBarScrollToTopManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFClickStatusBarScrollToTopManager.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/9. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 只要点击头部的状态栏,当前显示在眼前的scrollView就会移动到最初的位置 12 | */ 13 | @interface FFClickStatusBarScrollToTopManager : NSObject 14 | 15 | /** 开始生效 */ 16 | + (void)becomeEffective; 17 | 18 | /** 失效 */ 19 | + (void)disabled; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/公共部分/FFDropDownMenuNextPageVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuNextPageVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | 11 | @interface FFDropDownMenuNextPageVC : FFViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/公共部分/FFDropDownMenuNextPageVC.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuNextPageVC.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuNextPageVC.h" 10 | 11 | @interface FFDropDownMenuNextPageVC () 12 | 13 | @end 14 | 15 | @implementation FFDropDownMenuNextPageVC 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view from its nib. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/基本用法/Controller/FFDropDownMenuBaseUsageVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuBaseUsageVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/6. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * FFDropDownMenu的基本用法控制器 12 | */ 13 | @interface FFDropDownMenuBaseUsageVC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/实战____自定义菜单效果1/Controller/FFDropDownCustomMenuStyle1VC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownCustomMenuStyle1.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/12. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 实战----自定义菜单样式1 12 | */ 13 | @interface FFDropDownCustomMenuStyle1VC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/实战____自定义菜单效果1/Model/FFDropDownCustomMenuStyle1Model.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownCustomMenuStyle1Model.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/12. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFDropDownCustomMenuStyle1Model : FFDropDownMenuBasedModel 12 | 13 | /** 主标题的背景颜色 */ 14 | @property (nonatomic, strong) UIColor *mainTitleBgColor; 15 | 16 | /** 主标题 */ 17 | @property (nonatomic, copy) NSString *mainTitle; 18 | 19 | /** 副标题 */ 20 | @property (nonatomic, copy) NSString *subTitle; 21 | 22 | 23 | //菜单模型创建的属性用于自定义菜单cell,所以需要什么属性,自己定义 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/实战____自定义菜单效果1/Model/FFDropDownCustomMenuStyle1Model.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownCustomMenuStyle1Model.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/12. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownCustomMenuStyle1Model.h" 10 | 11 | @implementation FFDropDownCustomMenuStyle1Model 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/实战____自定义菜单效果1/View/FFDropDownCustomMenuStyle1Cell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownCustomMenuStyle1Cell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/12. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 自定义菜单效果1 菜单 cell 12 | */ 13 | @interface FFDropDownCustomMenuStyle1Cell : FFDropDownMenuBasedCell 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/实战____自定义菜单效果1/View/FFDropDownCustomMenuStyle1Cell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownCustomMenuStyle1Cell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/12. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownCustomMenuStyle1Cell.h" 10 | 11 | //model 12 | #import "FFDropDownCustomMenuStyle1Model.h" 13 | 14 | #import 15 | 16 | @interface FFDropDownCustomMenuStyle1Cell () 17 | 18 | @property (weak, nonatomic) IBOutlet UILabel *mainTitle_Label; 19 | 20 | @property (weak, nonatomic) IBOutlet UILabel *subTitle_Label; 21 | 22 | @end 23 | 24 | @implementation FFDropDownCustomMenuStyle1Cell 25 | 26 | - (void)setMenuModel:(id)menuModel { 27 | 28 | _menuModel = menuModel; 29 | 30 | //在这里将模型转成自定义的模型 31 | FFDropDownCustomMenuStyle1Model *realModel = (FFDropDownCustomMenuStyle1Model *)menuModel; 32 | 33 | self.mainTitle_Label.backgroundColor = realModel.mainTitleBgColor; 34 | 35 | self.mainTitle_Label.text = realModel.mainTitle; 36 | 37 | self.subTitle_Label.text = realModel.subTitle; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(xib)/Controller/FFDropDownMenuCustomXibCellVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomXibCellVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 自定义菜单cell (xib类型) 控制器 12 | */ 13 | @interface FFDropDownMenuCustomXibCellVC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(xib)/Model/FFDropDownMenuCustomXibCellModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomXibCellModel.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 自定义菜单模型 12 | */ 13 | @interface FFDropDownMenuCustomXibCellModel : FFDropDownMenuBasedModel 14 | 15 | //提醒:父类中有@property (nonatomic, copy) FFMenuBlock menuBlock; 这个属性 16 | 17 | 18 | /** 标题 */ 19 | @property (nonatomic, copy) NSString *title; 20 | 21 | /** 图片名称 */ 22 | @property (nonatomic, copy) NSString *iconName; 23 | 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(xib)/Model/FFDropDownMenuCustomXibCellModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomXibCellModel.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuCustomXibCellModel.h" 10 | 11 | @implementation FFDropDownMenuCustomXibCellModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(xib)/View/FFDropDownMenuCustomXibCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomXibCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 自定义的xib cell 12 | * 13 | * 注意:一定要在.m文件里重写setMenuModel,对控件进行赋值 14 | */ 15 | @interface FFDropDownMenuCustomXibCell : FFDropDownMenuBasedCell 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(xib)/View/FFDropDownMenuCustomXibCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomXibCell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuCustomXibCell.h" 10 | 11 | //model 12 | #import "FFDropDownMenuCustomXibCellModel.h" 13 | 14 | @interface FFDropDownMenuCustomXibCell () 15 | 16 | /** 图标—-imageView */ 17 | @property (weak, nonatomic) IBOutlet UIImageView *iconImageView; 18 | 19 | /** 标题--label */ 20 | @property (weak, nonatomic) IBOutlet UILabel *title_Label; 21 | 22 | @end 23 | 24 | @implementation FFDropDownMenuCustomXibCell 25 | 26 | /** 重写setMenuModel---对控件进行赋值 */ 27 | - (void)setMenuModel:(id)menuModel { 28 | _menuModel = menuModel; 29 | 30 | //在创建 FFDropDownMenu时候赋值的 menuModelsArray数组里放的是什么模型,下面就转换成什么模型 31 | FFDropDownMenuCustomXibCellModel *realMenuModel = (FFDropDownMenuCustomXibCellModel *)menuModel; 32 | 33 | //对控件进行属性的赋值 34 | self.iconImageView.image = [UIImage imageNamed:realMenuModel.iconName]; 35 | 36 | self.title_Label.text = realMenuModel.title; 37 | 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(非xib)/Controller/FFDropDownMenuCustomCellVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomCellVC.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | /** 11 | * 自定义菜单cell (非xib类型) 控制器 12 | */ 13 | @interface FFDropDownMenuCustomCellVC : FFViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/FFDropDownMenu/自定义菜单cell(非xib)/View/FFDropDownMenuCustomCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCustomCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/8/7. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFDropDownMenuCustomCell : FFDropDownMenuBasedCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Main(主界面)/Cell/FFExampleCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFExampleCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | @class FFExampleModel; 11 | /** 12 | * 主页例子的cell 13 | */ 14 | @interface FFExampleCell : UITableViewCell 15 | 16 | /** 例子的模型 */ 17 | @property (nonatomic, strong) FFExampleModel *exampleModel; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Main(主界面)/Cell/FFExampleCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFExampleCell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFExampleCell.h" 10 | 11 | //model 12 | #import "FFExampleModel.h" 13 | 14 | @interface FFExampleCell () 15 | 16 | /** 例子的名称Label */ 17 | @property (weak, nonatomic) IBOutlet UILabel *exampleName_Label; 18 | 19 | /** 例子的图片imageView */ 20 | @property (weak, nonatomic) IBOutlet UIImageView *exampleImageView; 21 | 22 | /** 例子对应的类的名称 */ 23 | @property (weak, nonatomic) IBOutlet UILabel *correspondClassName_Label; 24 | 25 | @end 26 | 27 | @implementation FFExampleCell 28 | 29 | - (void)setExampleModel:(FFExampleModel *)exampleModel { 30 | _exampleModel = exampleModel; 31 | 32 | /** 例子的名称Label */ 33 | self.exampleName_Label.text = exampleModel.exampleName; 34 | 35 | /** 例子的图片imageView */ 36 | NSString *imageName = exampleModel.exampleImageName.length ? exampleModel.exampleImageName : @"exampleDefaultImg"; 37 | self.exampleImageView.image = [UIImage imageNamed:imageName]; 38 | 39 | /** 例子对应的类的名称 */ 40 | self.correspondClassName_Label.text = [NSString stringWithFormat:@"例子对应的类:%@",exampleModel.correspondClassName]; 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Main(主界面)/Controller/FFMainNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFMainNavigationController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFNavigationController.h" 10 | 11 | @interface FFMainNavigationController : FFNavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Main(主界面)/Controller/FFMainViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFMainViewController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFTableViewController.h" 10 | /** 11 | * 主界面的控制器 12 | */ 13 | @interface FFMainViewController : FFTableViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Main(主界面)/Model/FFExampleModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFExampleModel.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 例子的模型 12 | */ 13 | @interface FFExampleModel : NSObject 14 | 15 | /** 例子的名称 */ 16 | @property (nonatomic, copy) NSString *exampleName; 17 | 18 | /** 例子的图片名称 */ 19 | @property (nonatomic, copy) NSString *exampleImageName; 20 | 21 | /** 例子对应的类的名称 */ 22 | @property (nonatomic, copy) NSString *correspondClassName; 23 | 24 | + (instancetype)exampleModelWithExampleName:(NSString *)exampleName exampleImageName:(NSString *)exampleImageName correspondClassName:(NSString *)correspondClassName; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Main(主界面)/Model/FFExampleModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFExampleModel.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFExampleModel.h" 10 | 11 | @implementation FFExampleModel 12 | 13 | + (instancetype)exampleModelWithExampleName:(NSString *)exampleName exampleImageName:(NSString *)exampleImageName correspondClassName:(NSString *)correspondClassName { 14 | FFExampleModel *model = [FFExampleModel new]; 15 | model.exampleName = exampleName; 16 | model.exampleImageName = exampleImageName; 17 | model.correspondClassName = correspondClassName; 18 | return model; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/NSString+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Extension.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Extension) 12 | 13 | /** 返回字符串所占用的尺寸 */ 14 | - (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/NSString+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Extension.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "NSString+Extension.h" 10 | 11 | @implementation NSString (Extension) 12 | 13 | //返回字符串所占用的尺寸. 14 | - (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize 15 | { 16 | NSDictionary *attrs = @{NSFontAttributeName : font}; 17 | return [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size; 18 | } 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/UIView+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (Extension) 12 | 13 | @property (nonatomic, assign) CGFloat x; 14 | @property (nonatomic, assign) CGFloat y; 15 | @property (nonatomic, assign) CGFloat centerX; 16 | @property (nonatomic, assign) CGFloat centerY; 17 | @property (nonatomic, assign) CGFloat width; 18 | @property (nonatomic, assign) CGFloat height; 19 | @property (nonatomic, assign) CGSize size; 20 | @property (nonatomic, assign) CGPoint origin; 21 | @property (nonatomic, assign) CGFloat top; 22 | @property (nonatomic, assign) CGFloat left; 23 | @property (nonatomic, assign) CGFloat bottom; 24 | @property (nonatomic, assign) CGFloat right; 25 | 26 | + (instancetype)viewFromXib; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/UIViewController+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Extension.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIViewController (Extension) 12 | 13 | /**从xib中加载控制器*/ 14 | + (instancetype)viewControllerFromNib; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/UIViewController+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Extension.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "UIViewController+Extension.h" 10 | 11 | @implementation UIViewController (Extension) 12 | 13 | 14 | 15 | 16 | + (instancetype)viewControllerFromNib { 17 | UIViewController *viewController = [[self alloc] initWithNibName:NSStringFromClass([self class]) bundle:nil]; 18 | return viewController; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/UIViewController+Swizzling.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Swizzling.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/10/1. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIViewController (Swizzling) 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Category/UIViewController+Swizzling.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Swizzling.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/10/1. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "UIViewController+Swizzling.h" 10 | 11 | #import 12 | 13 | 14 | @implementation UIViewController (Swizzling) 15 | 16 | + (void)load { 17 | 18 | //我们只有在开发的时候才需要查看哪个viewController将出现 19 | //所以在release模式下就没必要进行方法的交换 20 | #ifdef DEBUG 21 | 22 | //原本的viewWillAppear方法 23 | Method viewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:)); 24 | 25 | //需要替换成 能够输出日志的viewWillAppear 26 | Method logViewWillAppear = class_getInstanceMethod(self, @selector(logViewWillAppear:)); 27 | 28 | //两方法进行交换 29 | method_exchangeImplementations(viewWillAppear, logViewWillAppear); 30 | 31 | #endif 32 | 33 | } 34 | 35 | 36 | - (void)logViewWillAppear:(BOOL)animated { 37 | 38 | NSString *className = NSStringFromClass([self class]); 39 | 40 | //在这里,你可以进行过滤操作,指定哪些viewController需要打印,哪些不需要打印 41 | if ([className hasPrefix:@"UI"] == NO) { 42 | NSLog(@"%@ will appear",className); 43 | } 44 | 45 | 46 | //下面方法的调用,其实是调用viewWillAppear 47 | [self logViewWillAppear:animated]; 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Controller/FFNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFNavigationController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFNavigationController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Controller/FFNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFNavigationController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFNavigationController.h" 10 | 11 | @interface FFNavigationController () 12 | 13 | @end 14 | 15 | @implementation FFNavigationController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Controller/FFTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFTableViewController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFTableViewController : UITableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Controller/FFViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFViewController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * Controller的基类 12 | */ 13 | @interface FFViewController : UIViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/Controller/FFViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFViewController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFViewController.h" 10 | 11 | 12 | 13 | @interface FFViewController () 14 | 15 | @end 16 | 17 | @implementation FFViewController 18 | 19 | 20 | /***********************************生命周期***********************************/ 21 | #pragma mark - 生命周期 22 | - (void)viewDidLoad { 23 | [super viewDidLoad]; 24 | 25 | } 26 | 27 | 28 | /***********************************事件处理***********************************/ 29 | #pragma mark - 事件处理 30 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 31 | [self.view endEditing:YES]; 32 | } 33 | 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/View/FFTableSectionHeaderView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFTableSectionHeaderView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * tableView 每一组的headerView 12 | */ 13 | @interface FFTableSectionHeaderView : UIView 14 | 15 | /** 标题 */ 16 | @property (nonatomic, copy) NSString *title; 17 | 18 | - (void)setTitleColor:(UIColor *)titleColor; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Public(公共类)/View/FFTableSectionHeaderView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFTableSectionHeaderView.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFTableSectionHeaderView.h" 10 | 11 | @interface FFTableSectionHeaderView () 12 | 13 | /** 标题label */ 14 | @property (nonatomic, weak) UILabel *title_label; 15 | 16 | @end 17 | 18 | @implementation FFTableSectionHeaderView 19 | 20 | - (instancetype)initWithFrame:(CGRect)frame { 21 | if (self = [super initWithFrame:frame]) { 22 | self.backgroundColor = FFGrayColor(240); 23 | 24 | UILabel *title_label = [[UILabel alloc] init]; 25 | title_label.font = [UIFont systemFontOfSize:14]; 26 | title_label.textColor = FFGrayColor(150); 27 | 28 | self.title_label = title_label; 29 | [self addSubview:title_label]; 30 | } 31 | return self; 32 | } 33 | 34 | - (void)layoutSubviews { 35 | [super layoutSubviews]; 36 | 37 | CGFloat labelX = 16; 38 | self.title_label.frame = CGRectMake(labelX, 0, self.width - labelX, self.height); 39 | 40 | } 41 | 42 | - (void)setTitle:(NSString *)title { 43 | _title = title; 44 | self.title_label.text = title; 45 | } 46 | 47 | - (void)setTitleColor:(UIColor *)titleColor { 48 | self.title_label.textColor = titleColor; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/Category/UIView+FFExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+FFExtension.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/15. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (FFExtension) 12 | 13 | /** addSubview之后的回调block */ 14 | @property (nonatomic, copy) void(^didAddsubView)(); 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/Controller/FFRuntimeBaseController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFRuntimeBaseController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/13. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 基类控制器 12 | */ 13 | @interface FFRuntimeBaseController : UIViewController 14 | 15 | /** 启动进度条 */ 16 | - (void)starProgress; 17 | 18 | /** 结束进度条 */ 19 | - (void)endProgress; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/Controller/FFRuntimeObserveController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFRuntimeObserveController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/13. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFRuntimeBaseController.h" 10 | 11 | /** 12 | * 利用runtime监听任何方法的调用事件的demo控制器 13 | */ 14 | @interface FFRuntimeObserveController : FFRuntimeBaseController 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/Controller/FFRuntimeObserveController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFRuntimeObserveController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/13. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFRuntimeObserveController.h" 10 | #import "FFCustomView.h" 11 | 12 | @interface FFRuntimeObserveController () 13 | 14 | @end 15 | 16 | @implementation FFRuntimeObserveController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | 21 | self.view.backgroundColor = [UIColor whiteColor]; 22 | 23 | 24 | //网络请求前开始加载进度条 25 | [self starProgress]; 26 | 27 | 28 | //模拟网络延迟 29 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 30 | 31 | //网络请求完成结束进度条的加载 32 | [self endProgress]; 33 | }); 34 | 35 | 36 | //测试添加一个view 37 | UIView *view = [[UIView alloc] initWithFrame:self.view.bounds]; 38 | [self.view addSubview:view]; 39 | 40 | 41 | /* 42 | FFCustomView *customView = (FFCustomView *)self.view; 43 | customView.didAddSubView = ^ { 44 | NSLog(@"addSubView啦"); 45 | //addSubView之后需要做何处理的代码写在这即可 46 | }; 47 | 48 | [self.view addSubview:[UIView new]]; 49 | */ 50 | 51 | } 52 | 53 | 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/View/FFCustomView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/15. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFCustomView : UIView 12 | 13 | /** addSubView完成的回调block */ 14 | @property (nonatomic, copy) void(^didAddSubView)(); 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/View/FFCustomView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomView.m 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/15. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCustomView.h" 10 | 11 | @implementation FFCustomView 12 | 13 | - (void)addSubview:(UIView *)view { 14 | 15 | [super addSubview:view]; 16 | 17 | if (self.didAddSubView) { 18 | self.didAddSubView(); 19 | } 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/View/FFProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFProgressView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/13. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | /** 13 | * 进度条 14 | */ 15 | @interface FFProgressView : UIView 16 | 17 | 18 | - (void)star; 19 | 20 | - (void)end; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/Runtime/001_runtime监听/View/FFProgressView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFProgressView.m 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2016/12/13. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFProgressView.h" 10 | 11 | 12 | @interface FFProgressView () 13 | 14 | /** 前景view */ 15 | @property (nonatomic, strong) UIView *foregroundView; 16 | 17 | @end 18 | 19 | @implementation FFProgressView 20 | 21 | - (instancetype)initWithFrame:(CGRect)frame { 22 | if (self = [super initWithFrame:frame]) { 23 | //背景色 24 | self.backgroundColor = [UIColor clearColor]; 25 | 26 | self.foregroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 3)]; 27 | 28 | //前景色 29 | self.foregroundView.backgroundColor = FFColor(54, 188, 37); 30 | [self addSubview:self.foregroundView]; 31 | 32 | } 33 | return self; 34 | } 35 | 36 | /// 开始加载进度条 37 | - (void)star { 38 | self.foregroundView.width = 0; 39 | self.hidden = NO; 40 | 41 | [UIView animateWithDuration:10 delay:0 usingSpringWithDamping:1.0f initialSpringVelocity:1.0f options:kNilOptions animations:^{ 42 | self.foregroundView.width = FFScreenW * 0.8; 43 | 44 | } completion:nil]; 45 | } 46 | 47 | /// 结束加载进度条 48 | - (void)end { 49 | 50 | 51 | [UIView animateWithDuration:0.5 animations:^{ 52 | self.foregroundView.width = FFScreenW; 53 | } completion:^(BOOL finished) { 54 | self.hidden = YES; 55 | }]; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/程序入口/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/程序入口/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | //controller 12 | #import "FFMainViewController.h" 13 | #import "FFMainNavigationController.h" 14 | 15 | @interface AppDelegate () 16 | 17 | @end 18 | 19 | @implementation AppDelegate 20 | 21 | 22 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 23 | [application setStatusBarStyle:UIStatusBarStyleLightContent]; 24 | 25 | self.window = [[UIWindow alloc] initWithFrame:FFScreenBounds]; 26 | 27 | FFMainNavigationController *rootVC = [[FFMainNavigationController alloc] initWithRootViewController:[FFMainViewController new]]; 28 | self.window.rootViewController = rootVC; 29 | [self.window makeKeyAndVisible]; 30 | 31 | return YES; 32 | } 33 | 34 | 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/程序入口/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CollectionsOfExample 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/自定义控件(绘图)/FFCustomViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomViewCell.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2017/6/30. 6 | // Copyright © 2017年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FFCustomViewCell : UITableViewCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/自定义控件(绘图)/FFCustomViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomViewCell.m 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2017/6/30. 6 | // Copyright © 2017年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCustomViewCell.h" 10 | 11 | @implementation FFCustomViewCell 12 | 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/自定义控件(绘图)/FFCustomViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomViewController.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2017/6/30. 6 | // Copyright © 2017年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //自定义控件(绘图) 控制器 12 | @interface FFCustomViewController : UIViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/自定义控件(绘图)/FFCustomViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFCustomViewController.m 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2017/6/30. 6 | // Copyright © 2017年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFCustomViewController.h" 10 | 11 | //cell 12 | #import "FFCustomViewCell.h" 13 | 14 | @interface FFCustomViewController () 15 | 16 | @end 17 | 18 | @implementation FFCustomViewController 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | 23 | [self setup]; 24 | } 25 | 26 | static NSString *const FFCustomViewCellID = @"FFCustomViewCellID"; 27 | - (void)setup { 28 | self.navigationItem.title = @"自定义控件(绘图)"; 29 | 30 | UITableView *tableView = [[UITableView alloc] init]; 31 | tableView.frame = self.view.bounds; 32 | tableView.dataSource = self; 33 | tableView.delegate = self; 34 | tableView.backgroundColor = [UIColor blueColor]; 35 | [self.view addSubview:tableView]; 36 | 37 | //注册cell 38 | FFRegisterCellClass(tableView, FFCustomViewCell, FFCustomViewCellID); 39 | } 40 | 41 | 42 | //================================================================= 43 | // UITableViewDataSource 44 | //================================================================= 45 | #pragma mark - UITableViewDataSource 46 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 47 | return 1; 48 | } 49 | 50 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 51 | 52 | return [UITableViewCell new]; 53 | } 54 | 55 | 56 | //================================================================= 57 | // UITableViewDelegate 58 | //================================================================= 59 | #pragma mark - UITableViewDelegate 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/自定义控件(绘图)/绘制直线/FFDrawStraightLineView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDrawStraightLineView.h 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2017/6/30. 6 | // Copyright © 2017年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //绘制直线的view 12 | @interface FFDrawStraightLineView : UIView 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /CollectionsOfExample/Classes/自定义控件(绘图)/绘制直线/FFDrawStraightLineView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDrawStraightLineView.m 3 | // CollectionsOfExample 4 | // 5 | // Created by chenfanfang on 2017/6/30. 6 | // Copyright © 2017年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDrawStraightLineView.h" 10 | 11 | @implementation FFDrawStraightLineView 12 | 13 | 14 | - (void)drawRect:(CGRect)rect { 15 | 16 | //获取跟View相关联的上下文 17 | CGContextRef ctx = UIGraphicsGetCurrentContext(); 18 | 19 | //绘制路径 20 | UIBezierPath *path = [UIBezierPath bezierPath]; 21 | 22 | //设置起点 23 | [path moveToPoint:CGPointMake(10, 125)]; 24 | 25 | //添加一根线到某个点 26 | [path addLineToPoint:CGPointMake(200, 125)]; 27 | 28 | //把路径添加到上下文 29 | CGContextAddPath(ctx,path.CGPath); 30 | 31 | //把上下文的内容渲染到View上面. 32 | CGContextStrokePath(ctx); 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CollectionsOfExample/Resources/Plist文件/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /CollectionsOfExampleTests/CollectionsOfExampleTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionsOfExampleTests.m 3 | // CollectionsOfExampleTests 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CollectionsOfExampleTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CollectionsOfExampleTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /CollectionsOfExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /CollectionsOfExampleUITests/CollectionsOfExampleUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionsOfExampleUITests.m 3 | // CollectionsOfExampleUITests 4 | // 5 | // Created by mac on 16/7/17. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CollectionsOfExampleUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CollectionsOfExampleUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CollectionsOfExampleUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform:ios,'7.0' 2 | pod 'FFDropDownMenu' 3 | pod 'UITableView+FDTemplateLayoutCell' -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FFDropDownMenu (1.3.5) 3 | - UITableView+FDTemplateLayoutCell (1.4) 4 | 5 | DEPENDENCIES: 6 | - FFDropDownMenu 7 | - UITableView+FDTemplateLayoutCell 8 | 9 | SPEC CHECKSUMS: 10 | FFDropDownMenu: 224d40f7996f0dfdc5593e0e269fc585fed72e54 11 | UITableView+FDTemplateLayoutCell: 234e1582bcc4e18461af91155123bb96538ed030 12 | 13 | COCOAPODS: 0.39.0 14 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenu.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenu.h 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/9/13. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | #import "FFDropDownMenuBasedCell.h" 9 | #import "FFDropDownMenuBasedModel.h" 10 | 11 | 12 | #ifdef DEBUG 13 | 14 | #define FFLog(...) NSLog(@"\n\n--------------------------------------------------\n%s方法中的第 %d 行打印: \n%@\n--------------------------------------------------\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__]) 15 | 16 | #else 17 | 18 | #define FFLog(...) 19 | 20 | #endif -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuBasedCell.h 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/8/5. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * 下拉菜单的基本cell, 自定义cell继承这个cell即可 13 | */ 14 | @interface FFDropDownMenuBasedCell : UITableViewCell 15 | 16 | { 17 | @public 18 | id _menuModel; 19 | } 20 | 21 | /** 菜单模型 */ 22 | @property (nonatomic, strong) id menuModel; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuBasedCell.m 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/8/5. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuBasedCell.h" 10 | 11 | @implementation FFDropDownMenuBasedCell 12 | 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuBasedModel.h 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/8/6. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | //定义一个菜单的block 11 | typedef void(^FFMenuBlock)(); 12 | 13 | /** 14 | * 下拉菜单的基本模型,所有自定义模型必须继承这个模型 15 | * 16 | * 注意:若自定义一个继承于这个类的菜单模型,必须要自定义一个继承于FFDropDownMenuBasedCell的菜单cell 17 | */ 18 | @interface FFDropDownMenuBasedModel : NSObject 19 | 20 | /** 点击回调的block */ 21 | @property (nonatomic, copy) FFMenuBlock menuBlock; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuBasedModel.m 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/8/6. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuBasedModel.h" 10 | 11 | @implementation FFDropDownMenuBasedModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuCell.h 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuBasedCell.h" 10 | 11 | /** 12 | * 下拉菜单cell 13 | */ 14 | @interface FFDropDownMenuCell : FFDropDownMenuBasedCell 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuModel.h 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuBasedModel.h" 10 | 11 | /** 12 | * 下拉菜单模型 13 | */ 14 | @interface FFDropDownMenuModel : FFDropDownMenuBasedModel 15 | 16 | 17 | /** 菜单选项标题 */ 18 | @property (nonatomic, copy) NSString *menuItemTitle; 19 | 20 | /** 菜单选项图标名称 */ 21 | @property (nonatomic, copy) NSString *menuItemIconName; 22 | 23 | 24 | 25 | /** 26 | * 快速实例化一个下拉菜单模型 27 | * 28 | * @param menuItemTitle 菜单选项的标题 29 | * @param menuItemIconName 菜单选项的图标名称 30 | * @param menuBlock 点击的回调block 31 | * 32 | * @return 实例化的菜单模型 33 | */ 34 | + (instancetype)ff_DropDownMenuModelWithMenuItemTitle:(NSString *)menuItemTitle menuItemIconName:(NSString *)menuItemIconName menuBlock:(FFMenuBlock)menuBlock; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuModel.m 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuModel.h" 10 | 11 | @implementation FFDropDownMenuModel 12 | 13 | /** 14 | * 快速实例化一个下拉菜单模型 15 | * 16 | * @param menuItemTitle 菜单选项的标题 17 | * @param menuItemIconName 菜单选项的图标名称 18 | * @param menuBlock 点击的回调block 19 | * 20 | * @return 实例化的菜单模型 21 | */ 22 | + (instancetype)ff_DropDownMenuModelWithMenuItemTitle:(NSString *)menuItemTitle menuItemIconName:(NSString *)menuItemIconName menuBlock:(FFMenuBlock)menuBlock { 23 | FFDropDownMenuModel *model = [FFDropDownMenuModel new]; 24 | model.menuItemTitle = menuItemTitle; 25 | model.menuItemIconName = menuItemIconName; 26 | model.menuBlock = menuBlock; 27 | return model; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuTriangleView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuTriangleView.h 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import 10 | /** 11 | * 下拉菜单的三角形 12 | */ 13 | @interface FFDropDownMenuTriangleView : UIView 14 | 15 | /** 三角形的颜色 */ 16 | @property (nonatomic, strong) UIColor *triangleColor; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/FFDropDownMenu/FFDropDownMenuTriangleView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FFDropDownMenuTriangleView.m 3 | // FFDropDownMenuDemo 4 | // 5 | // Created by mac on 16/7/31. 6 | // Copyright © 2016年 chenfanfang. All rights reserved. 7 | // 8 | 9 | #import "FFDropDownMenuTriangleView.h" 10 | 11 | @interface FFDropDownMenuTriangleView () 12 | 13 | @end 14 | 15 | @implementation FFDropDownMenuTriangleView 16 | 17 | - (void)setTriangleColor:(UIColor *)triangleColor { 18 | _triangleColor = triangleColor; 19 | [self setNeedsDisplay]; 20 | } 21 | 22 | 23 | - (void)drawRect:(CGRect)rect { 24 | 25 | //绘制路径 26 | UIBezierPath *path = [UIBezierPath bezierPath]; 27 | 28 | //设置颜色 29 | [self.triangleColor set]; 30 | 31 | //-------------绘制三角形------------ 32 | // 33 | // B 34 | // /\ 35 | // / \ 36 | // / \ 37 | // /______\ 38 | // A C 39 | // 40 | // 41 | 42 | //设置起点 A 43 | [path moveToPoint:CGPointMake(0, rect.size.height)]; 44 | 45 | //添加一根线到某个点 B 46 | [path addLineToPoint:CGPointMake(rect.size.width * 0.5, 0)]; 47 | 48 | //添加一根线到某个点 C 49 | [path addLineToPoint:CGPointMake(rect.size.width, rect.size.height)]; 50 | 51 | //关闭路径 52 | [path closePath]; 53 | 54 | //填充(会把颜色填充进去) 55 | [path fill]; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /Pods/FFDropDownMenu/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 chenfanfang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenu.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenu.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenuBasedCell.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedCell.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenuBasedModel.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedModel.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenuCell.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuCell.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenuModel.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuModel.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenuTriangleView.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuTriangleView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FFDropDownMenu/FFDropDownMenuView.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/UITableView+FDTemplateLayoutCell/UITableView+FDIndexPathHeightCache.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDIndexPathHeightCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/UITableView+FDTemplateLayoutCell/UITableView+FDKeyedHeightCache.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDKeyedHeightCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDTemplateLayoutCell.h -------------------------------------------------------------------------------- /Pods/Headers/Private/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCellDebug.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDTemplateLayoutCellDebug.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenu.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenu.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenuBasedCell.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedCell.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenuBasedModel.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuBasedModel.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenuCell.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuCell.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenuModel.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuModel.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenuTriangleView.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuTriangleView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FFDropDownMenu/FFDropDownMenuView.h: -------------------------------------------------------------------------------- 1 | ../../../FFDropDownMenu/FFDropDownMenu/FFDropDownMenuView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/UITableView+FDTemplateLayoutCell/UITableView+FDIndexPathHeightCache.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDIndexPathHeightCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/UITableView+FDTemplateLayoutCell/UITableView+FDKeyedHeightCache.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDKeyedHeightCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDTemplateLayoutCell.h -------------------------------------------------------------------------------- /Pods/Headers/Public/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCellDebug.h: -------------------------------------------------------------------------------- 1 | ../../../UITableView+FDTemplateLayoutCell/Classes/UITableView+FDTemplateLayoutCellDebug.h -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FFDropDownMenu (1.3.5) 3 | - UITableView+FDTemplateLayoutCell (1.4) 4 | 5 | DEPENDENCIES: 6 | - FFDropDownMenu 7 | - UITableView+FDTemplateLayoutCell 8 | 9 | SPEC CHECKSUMS: 10 | FFDropDownMenu: 224d40f7996f0dfdc5593e0e269fc585fed72e54 11 | UITableView+FDTemplateLayoutCell: 234e1582bcc4e18461af91155123bb96538ed030 12 | 13 | COCOAPODS: 0.39.0 14 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FFDropDownMenu/FFDropDownMenu-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FFDropDownMenu : NSObject 3 | @end 4 | @implementation PodsDummy_FFDropDownMenu 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FFDropDownMenu/FFDropDownMenu-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FFDropDownMenu/FFDropDownMenu.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FFDropDownMenu" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FFDropDownMenu" "${PODS_ROOT}/Headers/Public/UITableView+FDTemplateLayoutCell" 3 | PODS_ROOT = ${SRCROOT} 4 | SKIP_INSTALL = YES -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods : NSObject 3 | @end 4 | @implementation PodsDummy_Pods 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FFDropDownMenu" "${PODS_ROOT}/Headers/Public/UITableView+FDTemplateLayoutCell" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FFDropDownMenu" -isystem "${PODS_ROOT}/Headers/Public/UITableView+FDTemplateLayoutCell" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"FFDropDownMenu" -l"UITableView+FDTemplateLayoutCell" 5 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FFDropDownMenu" "${PODS_ROOT}/Headers/Public/UITableView+FDTemplateLayoutCell" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FFDropDownMenu" -isystem "${PODS_ROOT}/Headers/Public/UITableView+FDTemplateLayoutCell" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"FFDropDownMenu" -l"UITableView+FDTemplateLayoutCell" 5 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Pods/Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_UITableView_FDTemplateLayoutCell : NSObject 3 | @end 4 | @implementation PodsDummy_UITableView_FDTemplateLayoutCell 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/UITableView+FDTemplateLayoutCell" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FFDropDownMenu" "${PODS_ROOT}/Headers/Public/UITableView+FDTemplateLayoutCell" 3 | PODS_ROOT = ${SRCROOT} 4 | SKIP_INSTALL = YES -------------------------------------------------------------------------------- /Pods/UITableView+FDTemplateLayoutCell/Classes/UITableView+FDKeyedHeightCache.h: -------------------------------------------------------------------------------- 1 | // The MIT License (MIT) 2 | // 3 | // Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in all 13 | // copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | 23 | #import 24 | 25 | @interface FDKeyedHeightCache : NSObject 26 | 27 | - (BOOL)existsHeightForKey:(id)key; 28 | - (void)cacheHeight:(CGFloat)height byKey:(id)key; 29 | - (CGFloat)heightForKey:(id)key; 30 | 31 | // Invalidation 32 | - (void)invalidateHeightForKey:(id)key; 33 | - (void)invalidateAllHeightCache; 34 | @end 35 | 36 | @interface UITableView (FDKeyedHeightCache) 37 | 38 | /// Height cache by key. Generally, you don't need to use it directly. 39 | @property (nonatomic, strong, readonly) FDKeyedHeightCache *fd_keyedHeightCache; 40 | @end 41 | -------------------------------------------------------------------------------- /Pods/UITableView+FDTemplateLayoutCell/Classes/UITableView+FDTemplateLayoutCellDebug.h: -------------------------------------------------------------------------------- 1 | // The MIT License (MIT) 2 | // 3 | // Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in all 13 | // copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | 23 | #import 24 | 25 | @interface UITableView (FDTemplateLayoutCellDebug) 26 | 27 | /// Helps to debug or inspect what is this "FDTemplateLayoutCell" extention doing, 28 | /// turning on to print logs when "creating", "calculating", "precaching" or "hitting cache". 29 | /// 30 | /// Default to NO, log by NSLog. 31 | /// 32 | @property (nonatomic, assign) BOOL fd_debugLogEnabled; 33 | 34 | /// Debug log controlled by "fd_debugLogEnabled". 35 | - (void)fd_debugLog:(NSString *)message; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Pods/UITableView+FDTemplateLayoutCell/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | --------------------------------------------------------------------------------