├── .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 |
--------------------------------------------------------------------------------