├── .gitignore
├── .travis.yml
├── ABOUT.MD
├── Fabric.framework
├── Fabric
├── Headers
│ ├── FABAttributes.h
│ └── Fabric.h
├── Info.plist
├── Modules
│ └── module.modulemap
├── run
└── uploadDSYM
├── LICENSE
├── Podfile
├── Podfile.lock
├── README.md
├── v2ex-iOS.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcshareddata
│ └── xcschemes
│ ├── v2ex-dev.xcscheme
│ └── v2ex.xcscheme
├── v2ex-iOS.xcworkspace
└── contents.xcworkspacedata
└── v2ex-iOS
├── Additions
├── AnimatedGIFImageSerialization
│ ├── AnimatedGIFImageSerialization.h
│ └── AnimatedGIFImageSerialization.m
├── BlockImagePickerController
│ ├── BlockImagePickerController.h
│ └── BlockImagePickerController.m
├── Categories
│ ├── NSDictionary+NotNullKey.h
│ ├── NSDictionary+NotNullKey.m
│ ├── UIImage+Tint.h
│ ├── UIImage+Tint.m
│ ├── UIView+SafeArea.h
│ └── UIView+SafeArea.m
├── DACircularProgress
│ ├── DACircularProgressView.h
│ └── DACircularProgressView.m
├── EXTScope
│ ├── EXTScope.h
│ ├── EXTScope.m
│ └── metamacros.h
├── HTMLParser
│ ├── HTMLNode.h
│ ├── HTMLNode.m
│ ├── HTMLParser.h
│ └── HTMLParser.m
├── Helpers
│ ├── UIImage+Cache..m
│ ├── UIImage+Cache.h
│ ├── UIImage+Tint.h
│ ├── UIImage+Tint.m
│ ├── V2Helper.h
│ └── V2Helper.m
├── IDMPhotoBrowser
│ ├── IDMCaptionView.h
│ ├── IDMCaptionView.m
│ ├── IDMPBConstants.h
│ ├── IDMPBLocalizations.bundle
│ │ ├── en.lproj
│ │ │ └── Localizable.strings
│ │ └── pt.lproj
│ │ │ └── Localizable.strings
│ ├── IDMPhoto.h
│ ├── IDMPhoto.m
│ ├── IDMPhotoBrowser.bundle
│ │ └── images
│ │ │ ├── IDMPhotoBrowser_arrowLeft.png
│ │ │ ├── IDMPhotoBrowser_arrowLeft@2x.png
│ │ │ ├── IDMPhotoBrowser_arrowRight.png
│ │ │ └── IDMPhotoBrowser_arrowRight@2x.png
│ ├── IDMPhotoBrowser.h
│ ├── IDMPhotoBrowser.m
│ ├── IDMPhotoProtocol.h
│ ├── IDMTapDetectingImageView.h
│ ├── IDMTapDetectingImageView.m
│ ├── IDMTapDetectingView.h
│ ├── IDMTapDetectingView.m
│ ├── IDMZoomingScrollView.h
│ └── IDMZoomingScrollView.m
├── JSONKit
│ ├── JSONKit.h
│ └── JSONKit.m
├── REForestedView
│ ├── UIImage+REFrosted.h
│ ├── UIImage+REFrosted.m
│ ├── UIView+REFrosted.h
│ └── UIView+REFrosted.m
├── SCActionSheet
│ ├── SCActionSheet.h
│ ├── SCActionSheet.m
│ ├── SCActionSheetButton.h
│ └── SCActionSheetButton.m
├── SCImageUploader
│ ├── SCImageUploader.h
│ └── SCImageUploader.m
├── SCMetionTextView
│ ├── NSString+SCMention.h
│ ├── NSString+SCMention.m
│ ├── SCMetionTextView.h
│ ├── SCMetionTextView.m
│ ├── SCQuote.h
│ └── SCQuote.m
├── SCNavitagionController
│ ├── SCBarButtonItem.h
│ ├── SCBarButtonItem.m
│ ├── SCNavigation.h
│ ├── SCNavigationController.h
│ ├── SCNavigationController.m
│ ├── SCNavigationItem.h
│ ├── SCNavigationItem.m
│ ├── SCNavigationPopAnimation.h
│ ├── SCNavigationPopAnimation.m
│ ├── SCNavigationPushAnimation.h
│ ├── SCNavigationPushAnimation.m
│ ├── SCViewController+NaviBar.h
│ ├── SCViewController+NaviBar.m
│ ├── V2NavigationBar.h
│ └── V2NavigationBar.m
├── SCPullRefresh
│ ├── CAAnimationBlocks
│ │ ├── CAAnimation+Blocks.h
│ │ └── CAAnimation+Blocks.m
│ ├── SCAnimationView.h
│ ├── SCAnimationView.m
│ ├── SCPullRefreshViewController.h
│ └── SCPullRefreshViewController.m
├── SCWeiboManager
│ ├── SCWeiboManager.h
│ ├── SCWeiboManager.m
│ ├── WBRequest+Block.h
│ └── WBRequest+Block.m
├── SCWeixinManager
│ ├── SCWeixinManager.h
│ └── SCWeixinManager.m
├── SDWebImage
│ ├── MKAnnotationView+WebCache.h
│ ├── MKAnnotationView+WebCache.m
│ ├── NSData+ImageContentType.h
│ ├── NSData+ImageContentType.m
│ ├── SDImageCache.h
│ ├── SDImageCache.m
│ ├── SDWebImageCompat.h
│ ├── SDWebImageCompat.m
│ ├── SDWebImageDecoder.h
│ ├── SDWebImageDecoder.m
│ ├── SDWebImageDownloader.h
│ ├── SDWebImageDownloader.m
│ ├── SDWebImageDownloaderOperation.h
│ ├── SDWebImageDownloaderOperation.m
│ ├── SDWebImageManager.h
│ ├── SDWebImageManager.m
│ ├── SDWebImageOperation.h
│ ├── SDWebImagePrefetcher.h
│ ├── SDWebImagePrefetcher.m
│ ├── UIButton+WebCache.h
│ ├── UIButton+WebCache.m
│ ├── UIImage+GIF.h
│ ├── UIImage+GIF.m
│ ├── UIImage+MultiFormat.h
│ ├── UIImage+MultiFormat.m
│ ├── UIImage+WebP.h
│ ├── UIImage+WebP.m
│ ├── UIImageView+WebCache.h
│ └── UIImageView+WebCache.m
├── SVProgressHUD
│ ├── SVProgressHUD.bundle
│ │ ├── error-black.png
│ │ ├── error-black@2x.png
│ │ ├── error.png
│ │ ├── error@2x.png
│ │ ├── success-black.png
│ │ ├── success-black@2x.png
│ │ ├── success.png
│ │ └── success@2x.png
│ ├── SVProgressHUD.h
│ └── SVProgressHUD.m
├── TTTAttributedLabel
│ ├── TTTAttributedLabel.h
│ └── TTTAttributedLabel.m
├── libWeiboSDK
│ ├── WeiboSDK.bundle
│ │ └── images
│ │ │ ├── close.png
│ │ │ └── close@2x.png
│ ├── WeiboSDK.h
│ └── libWeiboSDK.a
└── libWeixinSDK
│ ├── WXApi.h
│ ├── WXApiObject.h
│ └── libWeChatSDK.a
├── Controllers
├── V2CategoriesViewController.h
├── V2CategoriesViewController.m
├── V2FavoriteViewController.h
├── V2FavoriteViewController.m
├── V2LatestViewController.h
├── V2LatestViewController.m
├── V2LoginViewController.h
├── V2LoginViewController.m
├── V2MemberRepliesViewController.h
├── V2MemberRepliesViewController.m
├── V2MemberTopicsViewController.h
├── V2MemberTopicsViewController.m
├── V2MemberViewController.h
├── V2MemberViewController.m
├── V2NodeViewController.h
├── V2NodeViewController.m
├── V2NodesViewController.h
├── V2NodesViewController.m
├── V2NotificationViewController.h
├── V2NotificationViewController.m
├── V2ProfileViewController.h
├── V2ProfileViewController.m
├── V2RootViewController.h
├── V2RootViewController.m
├── V2SettingViewController.h
├── V2SettingViewController.m
├── V2TopicCreateViewController.h
├── V2TopicCreateViewController.m
├── V2TopicViewController.h
├── V2TopicViewController.m
├── V2WebViewController.h
├── V2WebViewController.m
├── V2WeiboViewController.h
└── V2WeiboViewController.m
├── Frameworks
├── Crashlytics.framework
│ ├── Crashlytics
│ ├── Headers
│ │ ├── ANSCompatibility.h
│ │ ├── Answers.h
│ │ ├── CLSAttributes.h
│ │ ├── CLSLogging.h
│ │ ├── CLSReport.h
│ │ ├── CLSStackFrame.h
│ │ └── Crashlytics.h
│ ├── Info.plist
│ ├── Modules
│ │ └── module.modulemap
│ ├── run
│ ├── submit
│ └── uploadDSYM
└── Fabric.framework
│ ├── Fabric
│ ├── Headers
│ ├── Modules
│ ├── Resources
│ ├── Versions
│ ├── A
│ │ ├── Fabric
│ │ ├── Headers
│ │ │ └── Fabric.h
│ │ ├── Modules
│ │ │ └── module.modulemap
│ │ └── Resources
│ │ │ └── Info.plist
│ └── Current
│ └── run
├── Images.xcassets
├── Action
│ ├── action_favorite.imageset
│ │ ├── Contents.json
│ │ ├── action_favorite@2x.png
│ │ └── action_favorite@3x.png
│ ├── action_forbidden.imageset
│ │ ├── Contents.json
│ │ ├── action_forbidden@2x.png
│ │ └── action_forbidden@3x.png
│ ├── action_safari.imageset
│ │ ├── Contents.json
│ │ ├── action_safari@2x.png
│ │ └── action_safari@3x.png
│ ├── action_thank.imageset
│ │ ├── Contents.json
│ │ ├── action_thank@2x.png
│ │ └── action_thank@3x.png
│ ├── share_twitter.imageset
│ │ ├── Contents.json
│ │ ├── share_twitter@2x.png
│ │ └── share_twitter@3x.png
│ ├── share_wechat_friends.imageset
│ │ ├── Contents.json
│ │ ├── share_wechat_friends@2x.png
│ │ └── share_wechat_friends@3x.png
│ ├── share_wechat_moments.imageset
│ │ ├── Contents.json
│ │ ├── share_wechat_moments@2x.png
│ │ └── share_wechat_moments@3x.png
│ └── share_weibo.imageset
│ │ ├── Contents.json
│ │ ├── share_weibo@2x.png
│ │ └── share_weibo@3x.png
├── AppIcon.appiconset
│ ├── Contents.json
│ ├── icon-120.png
│ ├── icon-29.png
│ ├── icon-29@2x.png
│ ├── icon-29@3x.png
│ ├── icon-40.png
│ ├── icon-40@2x.png
│ ├── icon-40@3x.png
│ ├── icon-58.png
│ ├── icon-60@3x.png
│ ├── icon-76.png
│ ├── icon-76@2x.png
│ ├── icon-80.png
│ └── icon-83.5@2x.png
├── Common
│ ├── 37x-Checkmark.imageset
│ │ ├── 37x-Checkmark@2x.png
│ │ ├── 37x-Checkmark@3x.png
│ │ └── Contents.json
│ ├── Arrow.imageset
│ │ ├── Arrow@2x.png
│ │ ├── Arrow@3x.png
│ │ └── Contents.json
│ ├── Browser_Icon_Backward.imageset
│ │ ├── Browser_Icon_Backward@2x.png
│ │ ├── Browser_Icon_Backward@3x.png
│ │ └── Contents.json
│ ├── Browser_Icon_Forward.imageset
│ │ ├── Browser_Icon_Forward@2x.png
│ │ ├── Browser_Icon_Forward@3x.png
│ │ └── Contents.json
│ ├── Browser_Icon_Refresh.imageset
│ │ ├── Browser_Icon_Refresh@2x.png
│ │ ├── Browser_Icon_Refresh@3x.png
│ │ └── Contents.json
│ ├── Default-568_blurred.imageset
│ │ ├── Contents.json
│ │ └── Default-568_blurred@2x.png
│ ├── Navi_Shadow.imageset
│ │ ├── Contents.json
│ │ ├── Navi_Shadow@2x.png
│ │ └── Navi_Shadow@3x.png
│ ├── avatar_default.imageset
│ │ ├── Contents.json
│ │ ├── avatar_default@2x.png
│ │ └── avatar_default@3x.png
│ ├── close.imageset
│ │ ├── Contents.json
│ │ ├── close@2x.png
│ │ └── close@3x.png
│ ├── default_avatar.imageset
│ │ ├── Contents.json
│ │ ├── default_avatar@2x.png
│ │ └── default_avatar@3x.png
│ ├── icon.imageset
│ │ ├── Contents.json
│ │ ├── icon@2x.png
│ │ └── icon@3x.png
│ ├── icon_fav.imageset
│ │ ├── Contents.json
│ │ ├── icon_fav@2x.png
│ │ └── icon_fav@3x.png
│ ├── icon_post.imageset
│ │ ├── Contents.json
│ │ ├── icon_post@2x.png
│ │ └── icon_post@3x.png
│ ├── icon_post_highlighted.imageset
│ │ ├── Contents.json
│ │ ├── icon_post_highlighted@2x.png
│ │ └── icon_post_highlighted@3x.png
│ ├── icon_reply.imageset
│ │ ├── Contents.json
│ │ ├── icon_reply@2x.png
│ │ └── icon_reply@3x.png
│ ├── icon_reply_highlighted.imageset
│ │ ├── Contents.json
│ │ ├── icon_reply_highlighted@2x.png
│ │ └── icon_reply_highlighted@3x.png
│ ├── icon_setting.imageset
│ │ ├── Contents.json
│ │ ├── icon_setting@2x.png
│ │ └── icon_setting@3x.png
│ ├── icon_share.imageset
│ │ ├── Contents.json
│ │ ├── icon_share@2x.png
│ │ └── icon_share@3x.png
│ ├── nav_comment.imageset
│ │ ├── Contents.json
│ │ ├── nav_comment@2x.png
│ │ └── nav_comment@3x.png
│ ├── navi_add.imageset
│ │ ├── Contents.json
│ │ ├── navi_add@2x.png
│ │ └── navi_add@3x.png
│ ├── navi_back.imageset
│ │ ├── Contents.json
│ │ ├── navi_back@2x.png
│ │ └── navi_back@3x.png
│ ├── navi_contract.imageset
│ │ ├── Contents.json
│ │ ├── navi_contract@2x.png
│ │ └── navi_contract@3x.png
│ ├── navi_done.imageset
│ │ ├── Contents.json
│ │ ├── navi_done@2x.png
│ │ └── navi_done@3x.png
│ ├── navi_dot.imageset
│ │ ├── Contents.json
│ │ ├── navi_dot@2x.png
│ │ └── navi_dot@3x.png
│ ├── navi_expend.imageset
│ │ ├── Contents.json
│ │ ├── navi_expend@2x.png
│ │ └── navi_expend@3x.png
│ ├── navi_mask.imageset
│ │ ├── Contents.json
│ │ ├── navi_mask@2x.png
│ │ └── navi_mask@3x.png
│ ├── navi_menu.imageset
│ │ ├── Contents.json
│ │ ├── navi_menu@2x.png
│ │ └── navi_menu@3x.png
│ ├── navi_menu_2.imageset
│ │ ├── Contents.json
│ │ ├── navi_menu_2@2x.png
│ │ └── navi_menu_2@3x.png
│ ├── navi_more.imageset
│ │ ├── Contents.json
│ │ ├── navi_more@2x.png
│ │ └── navi_more@3x.png
│ └── topic_placeholder.imageset
│ │ ├── Contents.json
│ │ ├── topic_placeholder@2x.png
│ │ └── topic_placeholder@3x.png
├── Contents.json
├── LaunchImage.launchimage
│ ├── Contents.json
│ ├── Default-1024h.png
│ ├── Default-1024h@2x.png
│ ├── Default-1104h@2x.png
│ ├── Default-1218h@2x.png
│ ├── Default-568h@2x.png
│ ├── Default-667h@2x.png
│ └── Default@2x.png
├── Profile
│ ├── Contents.json
│ ├── profile_link.imageset
│ │ ├── Contents.json
│ │ ├── profile_link@2x.png
│ │ └── profile_link@3x.png
│ ├── profile_location.imageset
│ │ ├── Contents.json
│ │ ├── profile_location@2x.png
│ │ └── profile_location@3x.png
│ ├── profile_reply.imageset
│ │ ├── Contents.json
│ │ ├── profile_reply@2x.png
│ │ └── profile_reply@3x.png
│ ├── profile_topic.imageset
│ │ ├── Contents.json
│ │ ├── profile_topic@2x.png
│ │ └── profile_topic@3x.png
│ ├── profile_twitter.imageset
│ │ ├── Contents.json
│ │ ├── profile_twitter@2x.png
│ │ └── profile_twitter@3x.png
│ └── quick_checkin.imageset
│ │ ├── Contents.json
│ │ ├── quick_checkin@2x.png
│ │ └── quick_checkin@3x.png
└── Section
│ ├── section_categories.imageset
│ ├── Contents.json
│ ├── section_categories@2x.png
│ └── section_categories@3x.png
│ ├── section_categories_highlighted.imageset
│ ├── Contents.json
│ ├── section_categories_highlighted@2x.png
│ └── section_categories_highlighted@3x.png
│ ├── section_divide.imageset
│ ├── Contents.json
│ ├── section_divide@2x.png
│ └── section_divide@3x.png
│ ├── section_fav.imageset
│ ├── Contents.json
│ ├── section_fav@2x.png
│ └── section_fav@3x.png
│ ├── section_fav_highlighted.imageset
│ ├── Contents.json
│ ├── section_fav_highlighted@2x.png
│ └── section_fav_highlighted@3x.png
│ ├── section_latest.imageset
│ ├── Contents.json
│ ├── section_latest@2x.png
│ └── section_latest@3x.png
│ ├── section_latest_highlighted.imageset
│ ├── Contents.json
│ ├── section_latest_highlighted@2x.png
│ └── section_latest_highlighted@3x.png
│ ├── section_message.imageset
│ ├── Contents.json
│ ├── section_message@2x.png
│ └── section_message@3x.png
│ ├── section_message_highlighted.imageset
│ ├── Contents.json
│ ├── section_message_highlighted@2x.png
│ └── section_message_highlighted@3x.png
│ ├── section_nodes.imageset
│ ├── Contents.json
│ ├── section_nodes@2x.png
│ └── section_nodes@3x.png
│ ├── section_nodes_highlighted.imageset
│ ├── Contents.json
│ ├── section_nodes_highlighted@2x.png
│ └── section_nodes_highlighted@3x.png
│ ├── section_notification.imageset
│ ├── Contents.json
│ ├── section_notification@2x.png
│ └── section_notification@3x.png
│ ├── section_notification_highlighted.imageset
│ ├── Contents.json
│ ├── section_notification_highlighted@2x.png
│ └── section_notification_highlighted@3x.png
│ ├── section_profile.imageset
│ ├── Contents.json
│ ├── section_profile@2x.png
│ └── section_profile@3x.png
│ ├── section_profile_highlighted.imageset
│ ├── Contents.json
│ ├── section_profile_highlighted@2x.png
│ └── section_profile_highlighted@3x.png
│ ├── section_setting.imageset
│ ├── Contents.json
│ ├── section_setting@2x.png
│ └── section_setting@3x.png
│ └── section_setting_highlighted.imageset
│ ├── Contents.json
│ ├── section_setting_highlighted@2x.png
│ └── section_setting_highlighted@3x.png
├── Managers
├── V2CheckInManager.h
├── V2CheckInManager.m
├── V2DataManager.h
├── V2DataManager.m
├── V2NotificationManager.h
├── V2NotificationManager.m
├── V2QuickActionManager.h
├── V2QuickActionManager.m
├── V2SettingManager.h
├── V2SettingManager.m
├── V2TopicStateManager.h
└── V2TopicStateManager.m
├── Models
├── V2BaseModel.h
├── V2BaseModel.m
├── V2MemberModel.h
├── V2MemberModel.m
├── V2MemberReplyModel.h
├── V2MemberReplyModel.m
├── V2NodeModel.h
├── V2NodeModel.m
├── V2NotificationModel.h
├── V2NotificationModel.m
├── V2ReplyModel.h
├── V2ReplyModel.m
├── V2TopicModel.h
├── V2TopicModel.m
├── V2UserModel.h
└── V2UserModel.m
├── Resources
├── Hahu.png
├── NodesList.plist
└── icon.png
├── V2AppDelegate.h
├── V2AppDelegate.m
├── V2AppKeys.h
├── Views
├── V2ActionCellView.h
├── V2ActionCellView.m
├── V2ActionItemView.h
├── V2ActionItemView.m
├── V2MemberReplyCell.h
├── V2MemberReplyCell.m
├── V2MenuSectionCell.h
├── V2MenuSectionCell.m
├── V2MenuSectionView.h
├── V2MenuSectionView.m
├── V2MenuView.h
├── V2MenuView.m
├── V2NodeMenuView.h
├── V2NodeMenuView.m
├── V2NodesViewCell.h
├── V2NodesViewCell.m
├── V2NotificationCell.h
├── V2NotificationCell.m
├── V2ProfileBioCell.h
├── V2ProfileBioCell.m
├── V2ProfileCell.h
├── V2ProfileCell.m
├── V2SettingCell.h
├── V2SettingCell.m
├── V2SettingCheckInCell.h
├── V2SettingCheckInCell.m
├── V2SettingSwitchCell.h
├── V2SettingSwitchCell.m
├── V2SettingWeiboCell.h
├── V2SettingWeiboCell.m
├── V2SubMenuSectionCell.h
├── V2SubMenuSectionCell.m
├── V2SubMenuSectionView.h
├── V2SubMenuSectionView.m
├── V2TopicBodyCell.h
├── V2TopicBodyCell.m
├── V2TopicInfoCell.h
├── V2TopicInfoCell.m
├── V2TopicListCell.h
├── V2TopicListCell.m
├── V2TopicReplyCell.h
├── V2TopicReplyCell.m
├── V2TopicTitleCell.h
├── V2TopicTitleCell.m
├── V2TopicToolBarItemView.h
├── V2TopicToolBarItemView.m
├── V2TopicToolBarView.h
└── V2TopicToolBarView.m
├── en.lproj
└── InfoPlist.strings
├── main.m
├── v2ex-iOS-Crashlytics-info.plist
├── v2ex-iOS-Info.plist
├── v2ex-iOS-Prefix.pch
└── zh-Hans.lproj
└── InfoPlist.strings
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | .DS_Store
3 | */build/*
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.moved-aside
14 | DerivedData
15 | .idea/
16 | *.hmap
17 | *.xccheckout
18 |
19 | #CocoaPods
20 | Pods
21 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | osx_image: xcode7.3
2 | language: objective-c
3 | xcode_project: v2ex-iOS.xcodeproj # path to your xcodeproj folder
4 | xcode_scheme: v2ex-dev
5 | script: xctool -project v2ex-iOS.xcodeproj -scheme v2ex-dev build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
6 |
7 | cache: cocoapods
8 |
9 | before_install:
10 | - gem install cocoapods # Since Travis is not always on latest version
11 | - pod install
12 |
--------------------------------------------------------------------------------
/ABOUT.MD:
--------------------------------------------------------------------------------
1 | 还没空写
2 |
--------------------------------------------------------------------------------
/Fabric.framework/Fabric:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/Fabric.framework/Fabric
--------------------------------------------------------------------------------
/Fabric.framework/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 14F1021
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | Fabric
11 | CFBundleIdentifier
12 | io.fabric.sdk.ios
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | Fabric
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 1.6.7
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | iPhoneOS
26 |
27 | CFBundleVersion
28 | 53
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 13C75
33 | DTPlatformName
34 | iphoneos
35 | DTPlatformVersion
36 | 9.2
37 | DTSDKBuild
38 | 13C75
39 | DTSDKName
40 | iphoneos9.2
41 | DTXcode
42 | 0721
43 | DTXcodeBuild
44 | 7C1002
45 | MinimumOSVersion
46 | 6.0
47 | NSHumanReadableCopyright
48 | Copyright © 2015 Twitter. All rights reserved.
49 | UIDeviceFamily
50 |
51 | 3
52 | 2
53 | 1
54 | 4
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/Fabric.framework/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module Fabric {
2 | umbrella header "Fabric.h"
3 |
4 | export *
5 | module * { export * }
6 | }
--------------------------------------------------------------------------------
/Fabric.framework/run:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # run
4 | #
5 | # Copyright (c) 2015 Crashlytics. All rights reserved.
6 |
7 | # Figure out where we're being called from
8 | DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
9 |
10 | # Quote path in case of spaces or special chars
11 | DIR="\"${DIR}"
12 |
13 | PATH_SEP="/"
14 | VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script"
15 | UPLOAD_COMMAND="uploadDSYM\" $@ run-script"
16 |
17 | # Ensure params are as expected, run in sync mode to validate
18 | eval $DIR$PATH_SEP$VALIDATE_COMMAND
19 | return_code=$?
20 |
21 | if [[ $return_code != 0 ]]; then
22 | exit $return_code
23 | fi
24 |
25 | # Verification passed, upload dSYM in background to prevent Xcode from waiting
26 | # Note: Validation is performed again before upload.
27 | # Output can still be found in Console.app
28 | eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 &
29 |
--------------------------------------------------------------------------------
/Fabric.framework/uploadDSYM:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/Fabric.framework/uploadDSYM
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 singro
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.
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '7.0'
2 | inhibit_all_warnings!
3 |
4 | def pods
5 | pod 'AFNetworking', '~> 2.2'
6 | pod 'NYXImagesKit', '~> 2.3'
7 | pod 'FXKeychain', '~> 1.5'
8 | pod 'BlocksKit', '~> 2.2.0'
9 | pod 'NSString-Hashes', '~> 1.2.1'
10 | pod 'FrameAccessor', '~> 1.3.2'
11 | pod 'MWFeedParser', '~> 1.0.1'
12 | pod 'RegexKitLite', '~> 4.0'
13 | pod 'MBProgressHUD', '~> 0.8'
14 | end
15 |
16 | post_install do |installer_representation|
17 | installer_representation.pods_project.targets.each do |target|
18 | target.build_configurations.each do |config|
19 | config.build_settings['ARCHS'] = 'armv7 arm64'
20 | end
21 | end
22 | end
23 |
24 | target "v2ex-dev" do
25 | pods
26 | end
27 |
28 | target "v2ex" do
29 | pods
30 | end
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://travis-ci.org/singro/v2ex)
2 |
3 | #### 关于
4 | V2EX for iOS
5 |
6 |
7 | #### 下载
8 |
9 | https://itunes.apple.com/us/app/v2ex-chuang-yi-gong-zuo-zhe/id898181535?ls=1&mt=8
10 |
11 | #### 截图
12 |
13 | 
14 |
15 | #### 运行
16 |
17 | ```
18 | pod install
19 | ```
20 | 若出现 `ld: library not found for -lPods-AFNetworking` 类似的, 设置 `Project` -> `Pods` 的 `Build Active Architecture Only` 为 `NO`
21 |
22 | #### 部分独立组件
23 |
24 | * [SCPullRefresh](https://github.com/singro/SCPullRefresh)
25 | ```
26 | 方便自定义下拉刷新和上拉加载动画
27 | ```
28 |
29 | * [SCNavigation](https://github.com/singro/SCNavigation)
30 | ```
31 | 自定义 Navigation (NavigationBar相关以及NavigationController)所有元素完全自定义,
32 | 通过 Pan 手势来完成类似 iOS7 的手势返回效果 。
33 | ```
34 |
35 | * [SCWeiboManager](https://github.com/singro/SCWeiboManager)
36 | ```
37 | 对微博官方 SDK 的 block 封装。 更加易用,配置更简单。
38 | ```
39 |
40 |
41 |
42 | #### 说明
43 |
44 | 1. `发图功能`
45 | 目前通过绑定微博后,发一条带图片的微博到密友来实现。*(更好的方法有待研究)*
46 | **使用方式**:绑定微博后,在输入界面输入 "&" 调出发图按钮。
47 |
48 | 2. `现有问题`
49 | 一些细节优化、错误提示、操作限制
50 |
51 | 3. `接口限制` 由于接口限制,一些功能暂时不做:比如 markdown, 部分 markdown 帖子的图片、链接显示问题等;回复的延时,新回复从接口返回延时比较大,长的可能超过 1 个小时,暂时不做处理,可以通过操作菜单 safari 打开从 web 页面看最新回复
52 |
53 | 4. `HTTPS` 默认是以 HTTP 访问所有接口,考虑被墙,稍后后更新支持 HTTPS 切换的版本到 App Store
54 |
55 |
56 | #### 已知的 bug
57 | * ~~话题内容过长时微信分享失败 [1.0.0]~~
58 | * ~~连续回复时,第二次回复失败 [1.0.0]~~
59 | * 某几个帖子点开 Crash [1.0.0]
60 |
61 | #### LICENSE
62 | MIT
63 |
64 | #### 捐赠
65 | 支付宝(singroapp#gmail.com):
66 |
67 | 
68 |
--------------------------------------------------------------------------------
/v2ex-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/v2ex-iOS.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Categories/NSDictionary+NotNullKey.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSDictionary+NSDictionary_NotNullKey.h
3 | // HeadLine
4 | //
5 | // Created by Ohw Althrun on 12-7-24.
6 | // Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | #define NILORSLASH(obj) (obj != nil) ? obj : @"/"
13 | #define NILORDASH(obj) (obj != nil) ? obj : @"-"
14 |
15 | @interface NSDictionary (NotNullKey)
16 | +(NSDictionary *) dictionaryWithPropertiesOfObject:(id) obj;
17 | - (id)objectForSafeKey:(id)key;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Categories/NSDictionary+NotNullKey.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSDictionary+NSDictionary_NotNullKey.m
3 | // HeadLine
4 | //
5 | // Created by Ohw Althrun on 12-7-24.
6 | // Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import "NSDictionary+NotNullKey.h"
10 |
11 | @implementation NSDictionary (NotNullKey)
12 |
13 | //把 NSObject 转为 NSDictionary
14 | +(NSDictionary *) dictionaryWithPropertiesOfObject:(id)obj
15 | {
16 | NSMutableDictionary *dict = [NSMutableDictionary dictionary];
17 |
18 | unsigned count;
19 | objc_property_t *properties = class_copyPropertyList([obj class], &count);
20 |
21 | for (int i = 0; i < count; i++) {
22 | NSString *key = [NSString stringWithUTF8String:property_getName(properties[i])];
23 | Class classObject = NSClassFromString([key capitalizedString]);
24 | if (classObject) {
25 | id subObj = [self dictionaryWithPropertiesOfObject:[obj valueForKey:key]];
26 | [dict setObject:subObj forKey:key];
27 | }
28 | else
29 | {
30 | id value = [obj valueForKey:key];
31 | if(value) [dict setObject:value forKey:key];
32 | }
33 | }
34 |
35 | free(properties);
36 |
37 | return [NSDictionary dictionaryWithDictionary:dict];
38 | }
39 |
40 | // in case of [NSNull null] values a nil is returned ...
41 | - (id)objectForSafeKey:(id)key {
42 | id object = [self objectForKey:key];
43 |
44 | if ([object isEqual:[NSNull null]])
45 | return nil;
46 |
47 | return object;
48 | }
49 |
50 | @end
51 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Categories/UIImage+Tint.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Tint.h
3 | //
4 | // Created by Matt Gemmell on 04/07/2010.
5 | // Copyright 2010 Instinctive Code.
6 | //
7 |
8 | #import
9 |
10 | @interface UIImage (MGTint)
11 |
12 | - (UIImage *)imageTintedWithColor:(UIColor *)color;
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Categories/UIImage+Tint.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Tint.m
3 | //
4 | // Created by Matt Gemmell on 04/07/2010.
5 | // Copyright 2010 Instinctive Code.
6 | //
7 |
8 | #import "UIImage+Tint.h"
9 |
10 |
11 | @implementation UIImage (MGTint)
12 |
13 |
14 | - (UIImage *)imageTintedWithColor:(UIColor *)color
15 | {
16 | if (color) {
17 | // Construct new image the same size as this one.
18 | UIImage *image;
19 | UIGraphicsBeginImageContextWithOptions([self size], NO, 0.0); // 0.0 for scale means "scale for device's main screen".
20 | CGRect rect = CGRectZero;
21 | rect.size = [self size];
22 |
23 | // tint the image
24 | [self drawInRect:rect];
25 | [color set];
26 | UIRectFillUsingBlendMode(rect, kCGBlendModeColor);
27 |
28 | // restore alpha channel
29 | [self drawInRect:rect blendMode:kCGBlendModeDestinationIn alpha:1.0f];
30 |
31 | image = UIGraphicsGetImageFromCurrentImageContext();
32 | UIGraphicsEndImageContext();
33 |
34 | return image;
35 | }
36 |
37 | return self;
38 |
39 | }
40 |
41 |
42 |
43 | @end
44 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Categories/UIView+SafeArea.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+SafeArea.h
3 | // v2ex-dev
4 | //
5 | // Created by Singro on 02/12/2017.
6 | // Copyright © 2017 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIView (SafeArea)
12 |
13 | @property (class, nonatomic, readonly) CGFloat sc_statusBarHeight; // 37 for iPhone X, 20 for Others
14 | @property (class, nonatomic, readonly) CGFloat sc_navigationBarHeighExcludeStatusBar; // 44
15 | @property (class, nonatomic, readonly) CGFloat sc_navigationBarHeight; // status + naviExStatus
16 | @property (class, nonatomic, readonly) CGFloat sc_bottomInset;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Categories/UIView+SafeArea.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+SafeArea.m
3 | // v2ex-dev
4 | //
5 | // Created by Singro on 02/12/2017.
6 | // Copyright © 2017 Singro. All rights reserved.
7 | //
8 |
9 | #import "UIView+SafeArea.h"
10 |
11 | @implementation UIView (SafeArea)
12 |
13 | + (CGFloat)sc_statusBarHeight
14 | {
15 | if (@available(iOS 11.0, *)) {
16 | return UIApplication.sharedApplication.keyWindow.safeAreaInsets.top;
17 | }
18 | return 20;
19 | }
20 |
21 | + (CGFloat)sc_navigationBarHeighExcludeStatusBar
22 | {
23 | return 44;
24 | }
25 |
26 | + (CGFloat)sc_navigationBarHeight
27 | {
28 | return self.sc_statusBarHeight + self.sc_navigationBarHeighExcludeStatusBar;
29 | }
30 |
31 | + (CGFloat)sc_bottomInset
32 | {
33 | if (@available(iOS 11.0, *)) {
34 | return UIApplication.sharedApplication.keyWindow.safeAreaInsets.bottom;
35 | }
36 | return 0;
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/DACircularProgress/DACircularProgressView.h:
--------------------------------------------------------------------------------
1 | //
2 | // DACircularProgressView.h
3 | // DACircularProgress
4 | //
5 | // Created by Daniel Amitay on 2/6/12.
6 | // Copyright (c) 2012 Daniel Amitay. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface DACircularProgressView : UIView
12 |
13 | @property(nonatomic, strong) UIColor *trackTintColor UI_APPEARANCE_SELECTOR;
14 | @property(nonatomic, strong) UIColor *progressTintColor UI_APPEARANCE_SELECTOR;
15 | @property(nonatomic) NSInteger roundedCorners UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-(
16 | @property(nonatomic) CGFloat thicknessRatio UI_APPEARANCE_SELECTOR;
17 | @property(nonatomic) NSInteger clockwiseProgress UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-(
18 | @property(nonatomic) CGFloat progress;
19 |
20 | @property(nonatomic) CGFloat indeterminateDuration UI_APPEARANCE_SELECTOR;
21 | @property(nonatomic) NSInteger indeterminate UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-(
22 |
23 | - (void)setProgress:(CGFloat)progress animated:(BOOL)animated;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/EXTScope/EXTScope.m:
--------------------------------------------------------------------------------
1 | //
2 | // EXTScope.m
3 | // extobjc
4 | //
5 | // Created by Justin Spahr-Summers on 2011-05-04.
6 | // Copyright (C) 2012 Justin Spahr-Summers.
7 | // Released under the MIT license.
8 | //
9 |
10 | #import "EXTScope.h"
11 |
12 | void ext_executeCleanupBlock (__strong ext_cleanupBlock_t *block) {
13 | (*block)();
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/HTMLParser/HTMLParser.h:
--------------------------------------------------------------------------------
1 | //
2 | // HTMLParser.h
3 | // StackOverflow
4 | //
5 | // Created by Ben Reeves on 09/03/2010.
6 | // Copyright 2010 Ben Reeves. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | #import "HTMLNode.h"
12 |
13 | @class HTMLNode;
14 |
15 | @interface HTMLParser : NSObject
16 | {
17 | @public
18 | htmlDocPtr _doc;
19 | }
20 |
21 | -(id)initWithContentsOfURL:(NSURL*)url error:(NSError**)error;
22 | -(id)initWithData:(NSData*)data error:(NSError**)error;
23 | -(id)initWithString:(NSString*)string error:(NSError**)error;
24 |
25 | //Returns the doc tag
26 | -(HTMLNode*)doc;
27 |
28 | //Returns the body tag
29 | -(HTMLNode*)body;
30 |
31 | //Returns the html tag
32 | -(HTMLNode*)html;
33 |
34 | //Returns the head tag
35 | - (HTMLNode*)head;
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Helpers/UIImage+Cache..m:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Cache.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 9/11/15.
6 | // Copyright © 2015 Singro. All rights reserved.
7 | //
8 |
9 | #import "UIImage+Cache.h"
10 |
11 | @implementation UIImage (Cache)
12 | @dynamic cached;
13 |
14 | - (BOOL)cached {
15 | return [objc_getAssociatedObject(self, @selector(cached)) boolValue];
16 | }
17 |
18 | - (void)setCached:(BOOL)cached {
19 | objc_setAssociatedObject(self, @selector(cached), @(cached), OBJC_ASSOCIATION_ASSIGN);
20 | }
21 |
22 | - (UIImage *)imageWithCornerRadius:(CGFloat)cornerRadius {
23 |
24 | UIImage* imageNew;
25 |
26 | UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
27 |
28 | const CGRect RECT = CGRectMake(0, 0, self.size.width, self.size.height);
29 | [[UIBezierPath bezierPathWithRoundedRect:RECT cornerRadius:cornerRadius] addClip];
30 | [self drawInRect:RECT];
31 | imageNew = UIGraphicsGetImageFromCurrentImageContext();
32 |
33 | UIGraphicsEndImageContext();
34 |
35 | return imageNew;
36 | }
37 |
38 | @end
39 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Helpers/UIImage+Cache.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Cache.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 9/11/15.
6 | // Copyright © 2015 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImage (Cache)
12 |
13 | @property (nonatomic, assign) BOOL cached;
14 |
15 | - (UIImage *)imageWithCornerRadius:(CGFloat)cornerRadius;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Helpers/UIImage+Tint.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Tint.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/25/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 |
10 | #import
11 |
12 | @interface UIImage (SCTint)
13 |
14 | @property (nonatomic, strong) UIImage *imageForCurrentTheme;
15 |
16 | - (UIImage *)imageWithTintColor:(UIColor *)tintColor;
17 |
18 | - (CGSize)fitWidth:(CGFloat)fitWidth;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Helpers/UIImage+Tint.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Tint.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/25/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "UIImage+Tint.h"
10 |
11 | @implementation UIImage (SCTint)
12 |
13 | @dynamic imageForCurrentTheme;
14 |
15 | - (UIImage *)imageForCurrentTheme {
16 | UIImage *image = self;
17 | if (kCurrentTheme == V2ThemeNight) {
18 | image = [image imageWithTintColor:[UIColor whiteColor]];
19 | }
20 | return image;
21 | }
22 |
23 | - (UIImage *)imageWithTintColor:(UIColor *)tintColor;
24 | {
25 | if (tintColor) {
26 |
27 | UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
28 | CGContextRef context = UIGraphicsGetCurrentContext();
29 | CGContextTranslateCTM(context, 0, self.size.height);
30 | CGContextScaleCTM(context, 1.0, -1.0);
31 | CGContextSetBlendMode(context, kCGBlendModeNormal);
32 | CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
33 | CGContextClipToMask(context, rect, self.CGImage);
34 | [tintColor setFill];
35 | CGContextFillRect(context, rect);
36 | UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
37 | UIGraphicsEndImageContext();
38 | return newImage;
39 |
40 | }
41 |
42 | return self;
43 |
44 | }
45 |
46 | - (CGSize)fitWidth:(CGFloat)fitWidth {
47 |
48 | CGFloat height = self.size.height;
49 | CGFloat width = self.size.width;
50 |
51 | if (width > fitWidth) {
52 | height *= fitWidth/width;
53 | width = fitWidth;
54 | }
55 |
56 | return CGSizeMake(width, height);
57 | }
58 |
59 |
60 | @end
61 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/Helpers/V2Helper.h:
--------------------------------------------------------------------------------
1 |
2 | #import
3 |
4 | @interface V2Helper : NSObject
5 |
6 | /**
7 | * Time & date
8 | */
9 | + (NSArray *)localDateStringWithUTCString:(NSString *)dateString;
10 |
11 | + (NSArray *)localDateStringWithUTCString:(NSString *)dateString Separation:(NSString *)separation;
12 |
13 | + (NSTimeInterval)timeIntervalWithUTCString:(NSString *)dateString;
14 |
15 | + (NSString *)timeRemainDescriptionWithTimeInterval:(NSTimeInterval)interval;
16 |
17 | + (NSString *)timeRemainDescriptionWithUTCString:(NSString *)dateString;
18 |
19 | + (NSString *)timeRemainDescriptionWithDateSP:(NSNumber *)dateSP;
20 |
21 | + (CGFloat)getTextWidthWithText:(NSString *)text Font:(UIFont *)font;
22 |
23 | + (CGFloat)getTextHeightWithText:(NSString *)text Font:(UIFont *)font Width:(CGFloat)width;
24 |
25 |
26 | /**
27 | * Other
28 | */
29 |
30 | + (NSString *)encodeUrlString:(NSString *)urlString;
31 |
32 | + (UIImage *)getImageFromView:(UIView *)view;
33 |
34 | + (UIImage *)getImageWithColor:(UIColor *)color;
35 |
36 | + (UIImage *)getImageWithColor:(UIColor *)color size:(CGSize)size;
37 |
38 |
39 | /**
40 | * Setting
41 | */
42 |
43 | + (UIImage *)getUserAvatarDefaultFromGender:(NSInteger)gender;
44 |
45 |
46 | @end
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMCaptionView.h:
--------------------------------------------------------------------------------
1 | //
2 | // IDMCaptionView.h
3 | // IDMPhotoBrowser
4 | //
5 | // Created by Michael Waterfall on 30/12/2011.
6 | // Copyright (c) 2011 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "IDMPhotoProtocol.h"
11 |
12 | @interface IDMCaptionView : UIView
13 |
14 | // Init
15 | - (id)initWithPhoto:(id)photo;
16 |
17 | // To create your own custom caption view, subclass this view
18 | // and override the following two methods (as well as any other
19 | // UIView methods that you see fit):
20 |
21 | // Override -setupCaption so setup your subviews and customise the appearance
22 | // of your custom caption
23 | // You can access the photo's data by accessing the _photo ivar
24 | // If you need more data per photo then simply subclass IDMPhoto and return your
25 | // subclass to the photo browsers -photoBrowser:photoAtIndex: delegate method
26 | - (void)setupCaption;
27 |
28 | // Override -sizeThatFits: and return a CGSize specifying the height of your
29 | // custom caption view. With width property is ignored and the caption is displayed
30 | // the full width of the screen
31 | - (CGSize)sizeThatFits:(CGSize)size;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPBConstants.h:
--------------------------------------------------------------------------------
1 | //
2 | // IDMPhotoBrowserConstants.h
3 | // PhotoBrowserDemo
4 | //
5 | // Created by Eduardo Callado on 10/7/13.
6 | //
7 | //
8 |
9 | #define SYSTEM_VERSION_EQUAL_TO(v) \
10 | ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
11 |
12 | #define SYSTEM_VERSION_GREATER_THAN(v) \
13 | ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
14 |
15 | #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) \
16 | ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
17 |
18 | #define SYSTEM_VERSION_LESS_THAN(v) \
19 | ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
20 |
21 | #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) \
22 | ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
23 |
24 | #define PADDING 10
25 | #define PAGE_INDEX_TAG_OFFSET 1000
26 | #define PAGE_INDEX(page) ([(page) tag] - PAGE_INDEX_TAG_OFFSET)
27 |
28 | // Debug Logging
29 | #if 0 // Set to 1 to enable debug logging
30 | #define IDMLog(x, ...) NSLog(x, ## __VA_ARGS__);
31 | #else
32 | #define IDMLog(x, ...)
33 | #endif
34 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPBLocalizations.bundle/en.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPBLocalizations.bundle/en.lproj/Localizable.strings
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPBLocalizations.bundle/pt.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | /* No comment provided by engineer. */
2 | "Cancel" = "Cancelar";
3 |
4 | /* Informing the user an item has finished copying */
5 | "Copied" = "Copiado";
6 |
7 | /* No comment provided by engineer. */
8 | "Copy" = "Copiar";
9 |
10 | /* Displayed with ellipsis as 'Copying...' when an item is in the process of being copied */
11 | "Copying" = "Copiando";
12 |
13 | /* No comment provided by engineer. */
14 | "Dismiss" = "Fechar";
15 |
16 | /* No comment provided by engineer. */
17 | "Done" = "Fechar";
18 |
19 | /* No comment provided by engineer. */
20 | "Email" = "Email";
21 |
22 | /* No comment provided by engineer. */
23 | "Email failed to send. Please try again." = "Email falhou ao enviar. Por favor, tente novamente.";
24 |
25 | /* Informing the user a process has failed */
26 | "Failed" = "Falhou";
27 |
28 | /* Used in the context: 'Showing 1 of 3 items' */
29 | "of" = "de";
30 |
31 | /* No comment provided by engineer. */
32 | "Photo" = "Foto";
33 |
34 | /* Displayed with ellipsis as 'Preparing...' when an item is in the process of being prepared */
35 | "Preparing" = "Preparando";
36 |
37 | /* No comment provided by engineer. */
38 | "Save" = "Salvar";
39 |
40 | /* Informing the user an item has been saved */
41 | "Saved" = "Salvada";
42 |
43 | /* Displayed with ellipsis as 'Saving...' when an item is in the process of being saved */
44 | "Saving" = "Salvando";
45 |
46 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhoto.h:
--------------------------------------------------------------------------------
1 | //
2 | // IDMPhoto.h
3 | // IDMPhotoBrowser
4 | //
5 | // Created by Michael Waterfall on 17/10/2010.
6 | // Copyright 2010 d3i. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "IDMPhotoProtocol.h"
11 | #import "AFNetworking.h"
12 |
13 | // This class models a photo/image and it's caption
14 | // If you want to handle photos, caching, decompression
15 | // yourself then you can simply ensure your custom data model
16 | // conforms to IDMPhotoProtocol
17 | @interface IDMPhoto : NSObject
18 |
19 | // Progress download block, used to update the circularView
20 | typedef void (^IDMProgressUpdateBlock)(CGFloat progress);
21 |
22 | // Properties
23 | @property (nonatomic, strong) NSString *caption;
24 | @property (nonatomic, strong) NSURL *photoURL;
25 | @property (nonatomic, strong) IDMProgressUpdateBlock progressUpdateBlock;
26 |
27 | // Class
28 | + (IDMPhoto *)photoWithImage:(UIImage *)image;
29 | + (IDMPhoto *)photoWithFilePath:(NSString *)path;
30 | + (IDMPhoto *)photoWithURL:(NSURL *)url;
31 |
32 | + (NSArray *)photosWithImages:(NSArray *)imagesArray;
33 | + (NSArray *)photosWithFilePaths:(NSArray *)pathsArray;
34 | + (NSArray *)photosWithURLs:(NSArray *)urlsArray;
35 |
36 | // Init
37 | - (id)initWithImage:(UIImage *)image;
38 | - (id)initWithFilePath:(NSString *)path;
39 | - (id)initWithURL:(NSURL *)url;
40 |
41 | @end
42 |
43 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowLeft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowLeft.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowLeft@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowLeft@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowRight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowRight.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowRight@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/IDMPhotoBrowser/IDMPhotoBrowser.bundle/images/IDMPhotoBrowser_arrowRight@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMTapDetectingImageView.h:
--------------------------------------------------------------------------------
1 | //
2 | // IDMTapDetectingImageView.h
3 | // IDMPhotoBrowser
4 | //
5 | // Created by Michael Waterfall on 04/11/2009.
6 | // Copyright 2009 d3i. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol IDMTapDetectingImageViewDelegate;
12 |
13 | @interface IDMTapDetectingImageView : UIImageView {
14 | id __weak tapDelegate;
15 | }
16 | @property (nonatomic, weak) id tapDelegate;
17 | - (void)handleSingleTap:(UITouch *)touch;
18 | - (void)handleDoubleTap:(UITouch *)touch;
19 | - (void)handleTripleTap:(UITouch *)touch;
20 | @end
21 |
22 | @protocol IDMTapDetectingImageViewDelegate
23 | @optional
24 | - (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch;
25 | - (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch;
26 | - (void)imageView:(UIImageView *)imageView tripleTapDetected:(UITouch *)touch;
27 | @end
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMTapDetectingView.h:
--------------------------------------------------------------------------------
1 | //
2 | // IDMTapDetectingView.h
3 | // IDMPhotoBrowser
4 | //
5 | // Created by Michael Waterfall on 04/11/2009.
6 | // Copyright 2009 d3i. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol IDMTapDetectingViewDelegate;
12 |
13 | @interface IDMTapDetectingView : UIView {
14 | id __weak tapDelegate;
15 | }
16 | @property (nonatomic, weak) id tapDelegate;
17 | - (void)handleSingleTap:(UITouch *)touch;
18 | - (void)handleDoubleTap:(UITouch *)touch;
19 | - (void)handleTripleTap:(UITouch *)touch;
20 | @end
21 |
22 | @protocol IDMTapDetectingViewDelegate
23 | @optional
24 | - (void)view:(UIView *)view singleTapDetected:(UITouch *)touch;
25 | - (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch;
26 | - (void)view:(UIView *)view tripleTapDetected:(UITouch *)touch;
27 | @end
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMTapDetectingView.m:
--------------------------------------------------------------------------------
1 | //
2 | // IDMTapDetectingView.m
3 | // IDMPhotoBrowser
4 | //
5 | // Created by Michael Waterfall on 04/11/2009.
6 | // Copyright 2009 d3i. All rights reserved.
7 | //
8 |
9 | #import "IDMTapDetectingView.h"
10 |
11 | @implementation IDMTapDetectingView
12 |
13 | @synthesize tapDelegate;
14 |
15 | - (id)init {
16 | if ((self = [super init])) {
17 | self.userInteractionEnabled = YES;
18 | }
19 | return self;
20 | }
21 |
22 | - (id)initWithFrame:(CGRect)frame {
23 | if ((self = [super initWithFrame:frame])) {
24 | self.userInteractionEnabled = YES;
25 | }
26 | return self;
27 | }
28 |
29 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
30 | UITouch *touch = [touches anyObject];
31 | NSUInteger tapCount = touch.tapCount;
32 | switch (tapCount) {
33 | case 1:
34 | [self handleSingleTap:touch];
35 | break;
36 | case 2:
37 | [self handleDoubleTap:touch];
38 | break;
39 | case 3:
40 | [self handleTripleTap:touch];
41 | break;
42 | default:
43 | break;
44 | }
45 | [[self nextResponder] touchesEnded:touches withEvent:event];
46 | }
47 |
48 | - (void)handleSingleTap:(UITouch *)touch {
49 | if ([tapDelegate respondsToSelector:@selector(view:singleTapDetected:)])
50 | [tapDelegate view:self singleTapDetected:touch];
51 | }
52 |
53 | - (void)handleDoubleTap:(UITouch *)touch {
54 | if ([tapDelegate respondsToSelector:@selector(view:doubleTapDetected:)])
55 | [tapDelegate view:self doubleTapDetected:touch];
56 | }
57 |
58 | - (void)handleTripleTap:(UITouch *)touch {
59 | if ([tapDelegate respondsToSelector:@selector(view:tripleTapDetected:)])
60 | [tapDelegate view:self tripleTapDetected:touch];
61 | }
62 |
63 | @end
64 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/IDMPhotoBrowser/IDMZoomingScrollView.h:
--------------------------------------------------------------------------------
1 | //
2 | // IDMZoomingScrollView.h
3 | // IDMPhotoBrowser
4 | //
5 | // Created by Michael Waterfall on 14/10/2010.
6 | // Copyright 2010 d3i. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "IDMPhotoProtocol.h"
11 | #import "IDMTapDetectingImageView.h"
12 | #import "IDMTapDetectingView.h"
13 |
14 | #import "DACircularProgressView.h"
15 |
16 | @class IDMPhotoBrowser, IDMPhoto, IDMCaptionView;
17 |
18 | @interface IDMZoomingScrollView : UIScrollView {
19 |
20 | IDMPhotoBrowser *__weak _photoBrowser;
21 | id _photo;
22 |
23 | // This view references the related caption view for simplified handling in photo browser
24 | IDMCaptionView *_captionView;
25 |
26 | IDMTapDetectingView *_tapView; // for background taps
27 |
28 | DACircularProgressView *_progressView;
29 | }
30 |
31 | @property (nonatomic, strong) IDMTapDetectingImageView *photoImageView;
32 | @property (nonatomic, strong) IDMCaptionView *captionView;
33 | @property (nonatomic, strong) id photo;
34 |
35 | - (id)initWithPhotoBrowser:(IDMPhotoBrowser *)browser;
36 | - (void)displayImage;
37 | - (void)displayImageFailure;
38 | - (void)setProgress:(CGFloat)progress forPhoto:(IDMPhoto*)photo;
39 | - (void)setMaxMinZoomScalesForCurrentBounds;
40 | - (void)prepareForReuse;
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/REForestedView/UIImage+REFrosted.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+REFrostedViewController.h
3 | // REFrostedViewController
4 | //
5 | // Copyright (c) 2013 Roman Efimov (https://github.com/romaonthego)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in
15 | // all copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "A3S IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | // THE SOFTWARE.
24 | //
25 |
26 | #import
27 | #import
28 | #import
29 | #import
30 |
31 | @interface UIImage (REFrostedViewController)
32 |
33 | - (UIImage *)re_applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage;
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/REForestedView/UIView+REFrosted.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+REFrostedViewController.h
3 | // REFrostedViewController
4 | //
5 | // Copyright (c) 2013 Roman Efimov (https://github.com/romaonthego)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in
15 | // all copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | // THE SOFTWARE.
24 | //
25 |
26 | #import
27 | #import
28 |
29 | @interface UIView (REFrosted)
30 |
31 | - (UIImage *)re_screenshot;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCActionSheet/SCActionSheet.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCActionSheet.h
3 | // KeyShare
4 | //
5 | // Created by Singro on 12/27/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class SCActionSheetButton;
12 |
13 | @interface SCActionSheet : UIView
14 |
15 | @property (nonatomic, copy) UIColor *titleTextColor;
16 | @property (nonatomic, copy) UIColor *deviderLineColor;
17 | @property (nonatomic, copy) void (^endAnimationBlock)();
18 |
19 | @property (nonatomic, strong) UIView *showInView;
20 |
21 | + (BOOL)isActionSheetShowing;
22 |
23 | - (instancetype)sc_initWithTitles:(NSArray *)titles customViews:(NSArray *)customViews buttonTitles:(NSString *)buttonTitles, ...;
24 |
25 | //- (instancetype)initWithTitle:(NSString *)title customView:(UIView *)customView titleArray:(NSArray *)buttonTitles;
26 |
27 | - (void)sc_setButtonHandler:(void (^)(void))block forIndex:(NSInteger)index;
28 |
29 | - (void)sc_configureButtonWithBlock:(void (^)(SCActionSheetButton *button))block forIndex:(NSInteger)index;
30 |
31 | - (void)sc_show:(BOOL)animated;
32 |
33 | - (void)sc_hide:(BOOL)animated;
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCActionSheet/SCActionSheetButton.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCActionSheetButton.h
3 | // KeyShare
4 | //
5 | // Created by Singro on 12/27/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef NS_ENUM(NSInteger, SCActionSheetButtonType) {
12 | SCActionSheetButtonTypeRed,
13 | SCActionSheetButtonTypeNormal
14 | };
15 |
16 | @interface SCActionSheetButton : UIButton
17 |
18 | @property (nonatomic, strong) UIColor *buttonBottomLineColor;
19 | @property (nonatomic, strong) UIColor *buttonBackgroundColor;
20 | @property (nonatomic, strong) UIColor *buttonBorderColor;
21 |
22 | @property (nonatomic, assign) SCActionSheetButtonType type;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCImageUploader/SCImageUploader.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCImageUploader.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 8/6/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SCImageUploader : NSObject
12 |
13 | - (instancetype)initWithImage:(UIImage *)image compelete:(void (^)(NSURL *url, BOOL finished))block;
14 |
15 | - (void)sc_show:(BOOL)animated;
16 |
17 | - (void)sc_hide:(BOOL)animated;
18 |
19 | + (UIImage *)scaleAndRotateImage:(UIImage *)image;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCMetionTextView/NSString+SCMention.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+SCMention.h
3 | // newSponia
4 | //
5 | // Created by Singro on 3/26/14.
6 | // Copyright (c) 2014 Sponia. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSString (SCMention)
12 |
13 | - (NSString *)enumerateMetionObjectsUsingBlock:(void (^)(id object, NSRange range))block;
14 |
15 | - (NSString *)metionPlainString;
16 |
17 | - (NSString *)mentionStringFromHtmlString:(NSString *)htmlString;
18 |
19 | - (NSArray *)quoteArray;
20 |
21 | @end
22 |
23 |
24 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCMetionTextView/SCMetionTextView.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCMetionTextView.h
3 | // SCMetionTextView
4 | //
5 | // Created by Singro on 3/14/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "SCQuote.h"
12 |
13 | @interface SCMetionTextView : UITextView
14 |
15 | @property (nonatomic, copy) UIColor *textBackgroundColor;
16 |
17 | @property (nonatomic, readonly) UILabel *placeHolderLabel;
18 | @property (nonatomic, copy) NSString *placeholder;
19 | @property (nonatomic, strong) UIColor *placeholderColor;
20 |
21 | @property (nonatomic, copy) BOOL (^textViewShouldBeginEditingBlock)(UITextView *textView);
22 | @property (nonatomic, copy) BOOL (^textViewShouldChangeBlock)(UITextView *textView, NSString *text);
23 | @property (nonatomic, copy) void (^textViewDidChangeBlock)(UITextView *textView);
24 |
25 | @property (nonatomic, copy) void (^textViewDidAddQuoteSuccessBlock)();
26 |
27 | // getter
28 | @property (nonatomic, copy) NSString *renderedString;
29 |
30 | - (void)addQuote:(SCQuote *)quote;
31 |
32 | - (void)setNeedsRefreshQuotes;
33 |
34 | - (void)removeAllQuotes;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCMetionTextView/SCQuote.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCQuote.h
3 | // SCMetionTextView
4 | //
5 | // Created by Singro on 3/14/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef NS_ENUM(NSInteger, SCQuoteType) {
12 | SCQuoteTypeNone,
13 | SCQuoteTypeUser,
14 | SCQuoteTypeEmail,
15 | SCQuoteTypeLink,
16 | SCQuoteTypeAppStore,
17 | SCQuoteTypeImage,
18 | SCQuoteTypeVedio,
19 | SCQuoteTypeTopic,
20 | SCQuoteTypeNode,
21 | };
22 |
23 | @interface SCQuote : NSObject
24 |
25 | @property (nonatomic, copy) NSString *string;
26 | @property (nonatomic, copy) NSString *identifier;
27 | @property (nonatomic, assign) SCQuoteType type;
28 |
29 | @property (nonatomic, assign) NSRange range;
30 | @property (nonatomic, strong) NSMutableArray *backgroundArray;
31 |
32 | - (NSString *)quoteString;
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCMetionTextView/SCQuote.m:
--------------------------------------------------------------------------------
1 | //
2 | // SCQuote.m
3 | // SCMetionTextView
4 | //
5 | // Created by Singro on 3/14/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCQuote.h"
10 |
11 | @implementation SCQuote
12 |
13 | - (instancetype)init {
14 | self = [super init];
15 |
16 | if (self) {
17 |
18 | self.type = SCQuoteTypeNone;
19 | self.backgroundArray = [[NSMutableArray alloc] initWithCapacity:2];
20 |
21 | }
22 |
23 | return self;
24 | }
25 |
26 | - (NSString *)quoteString {
27 |
28 | NSString *typeString = @"";
29 | switch (self.type) {
30 | case SCQuoteTypeTopic:
31 | typeString = @"topic";
32 | break;
33 | case SCQuoteTypeUser:
34 | typeString = @"user";
35 | break;
36 | case SCQuoteTypeEmail:
37 | typeString = @"email";
38 | break;
39 | case SCQuoteTypeLink:
40 | typeString = @"link";
41 | break;
42 | case SCQuoteTypeAppStore:
43 | typeString = @"appStore";
44 | break;
45 | case SCQuoteTypeImage:
46 | typeString = @"image";
47 | break;
48 | case SCQuoteTypeVedio:
49 | typeString = @"vedio";
50 | break;
51 | case SCQuoteTypeNode:
52 | typeString = @"node";
53 | break;
54 | default:
55 | break;
56 | }
57 |
58 | return [NSString stringWithFormat:@"[%@(%@)%@]", typeString, self.identifier, self.string];
59 | }
60 |
61 |
62 | @end
63 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCBarButtonItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCBarButtonItem.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/25/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef NS_ENUM(NSInteger, SCBarButtonItemStyle) { // for future use
12 | SCBarButtonItemStylePlain,
13 | SCBarButtonItemStyleBordered,
14 | SCBarButtonItemStyleDone,
15 | };
16 |
17 | @interface SCBarButtonItem : NSObject
18 |
19 | @property (nonatomic, strong) UIView *view;
20 |
21 | @property (nonatomic, assign, getter = isEnabled) BOOL enabled;
22 | @property (nonatomic, copy) NSString *badge;
23 |
24 | - (instancetype)initWithTitle:(NSString *)title style:(SCBarButtonItemStyle)style handler:(void (^)(id sender))action;
25 |
26 | - (instancetype)initWithImage:(UIImage *)image style:(SCBarButtonItemStyle)style handler:(void (^)(id sender))action;
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCNavigation.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNavigation.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/25/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #ifndef v2ex_iOS_SCNavigation_h
10 | #define v2ex_iOS_SCNavigation_h
11 |
12 | #import "SCNavigationController.h"
13 | #import "SCNavigationItem.h"
14 | #import "SCBarButtonItem.h"
15 | #import "SCViewController+NaviBar.h"
16 |
17 | #endif
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCNavigationController.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNavigationController.h
3 | // newSponia
4 | //
5 | // Created by Singro on 2/19/14.
6 | // Copyright (c) 2014 Sponia. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SCNavigationController : UINavigationController
12 |
13 | @property (nonatomic, assign) BOOL enableInnerInactiveGesture;
14 |
15 | + (void)createNavigationBarForViewController:(UIViewController *)viewController;
16 |
17 | @end
18 |
19 | static NSString * const kRootViewControllerResetDelegateNotification = @"RootViewControllerResetDelegateNotification";
20 | static NSString * const kRootViewControllerCancelDelegateNotification = @"RootViewControllerCancelDelegateNotification";
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCNavigationItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNavigationItem.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/25/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class SCBarButtonItem;
12 | @interface SCNavigationItem : NSObject
13 |
14 | @property (nonatomic, strong ) SCBarButtonItem *leftBarButtonItem;
15 | @property (nonatomic, strong ) SCBarButtonItem *rightBarButtonItem;
16 | @property (nonatomic, copy ) NSString *title;
17 |
18 | @property (nonatomic, readonly) UIView *titleView;
19 | @property (nonatomic, readonly) UILabel *titleLabel;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCNavigationPopAnimation.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNavigationPopAnimation.h
3 | // newSponia
4 | //
5 | // Created by Singro on 3/2/14.
6 | // Copyright (c) 2014 Sponia. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SCNavigationPopAnimation : NSObject
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCNavigationPushAnimation.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNavigationPushAnimation.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/25/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SCNavigationPushAnimation : NSObject
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/SCViewController+NaviBar.h:
--------------------------------------------------------------------------------
1 | //
2 | // SPViewController+NaviBar.h
3 | // newSponia
4 | //
5 | // Created by Singro on 5/19/14.
6 | // Copyright (c) 2014 Sponia. All rights reserved.
7 | //
8 |
9 | #import "SCNavigationItem.h"
10 | #import "SCBarButtonItem.h"
11 |
12 | @interface UIViewController (SCNavigation)
13 |
14 | @property (nonatomic, strong) SCNavigationItem *sc_navigationItem;
15 | @property (nonatomic, strong) UIView *sc_navigationBar;
16 |
17 | @property(nonatomic, getter = sc_isNavigationBarHidden) BOOL sc_navigationBarHidden;
18 |
19 | - (void)sc_setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated;
20 |
21 |
22 |
23 | //- (void)configureBarItemsShowing:(BOOL)isShowing;
24 |
25 | - (SCBarButtonItem *)createBackItem;
26 |
27 | - (void)naviBeginRefreshing;
28 | - (void)naviEndRefreshing;
29 |
30 | - (void)createNavigationBar;
31 |
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/V2NavigationBar.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NavigationBar.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 6/23/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2NavigationBar : UIView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCNavitagionController/V2NavigationBar.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2NavigationBar.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 6/23/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2NavigationBar.h"
10 |
11 | @interface V2NavigationBar ()
12 |
13 | @property (nonatomic, strong) UIView *lineView;
14 | @end
15 |
16 | @implementation V2NavigationBar
17 |
18 | - (instancetype)initWithFrame:(CGRect)frame
19 | {
20 | self = [super initWithFrame:frame];
21 | if (self) {
22 |
23 | self.frame = (CGRect){0, 0, kScreenWidth, UIView.sc_navigationBarHeight};
24 |
25 | self.backgroundColor = kNavigationBarColor;
26 |
27 | self.lineView = [[UIView alloc] initWithFrame:(CGRect){0, UIView.sc_navigationBarHeight, kScreenWidth, 0.5}];
28 | self.lineView.backgroundColor = kNavigationBarLineColor;
29 | [self addSubview:self.lineView];
30 |
31 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveThemeChangeNotification) name:kThemeDidChangeNotification object:nil];
32 |
33 | }
34 | return self;
35 | }
36 |
37 | - (instancetype)init {
38 | return [self initWithFrame:CGRectZero];
39 | }
40 |
41 | - (void)dealloc {
42 | [[NSNotificationCenter defaultCenter] removeObserver:self];
43 | }
44 |
45 | #pragma mark - Notifications
46 |
47 | - (void)didReceiveThemeChangeNotification {
48 |
49 | self.backgroundColor = kNavigationBarColor;
50 | self.lineView.backgroundColor = kNavigationBarLineColor;
51 |
52 | }
53 |
54 | @end
55 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCPullRefresh/CAAnimationBlocks/CAAnimation+Blocks.h:
--------------------------------------------------------------------------------
1 | //
2 | // CAAnimation+Blocks.h
3 | // CAAnimationBlocks
4 | //
5 | // Created by xissburg on 7/7/11.
6 | // Copyright 2011 xissburg. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface CAAnimation (BlocksAddition)
13 |
14 | @property (nonatomic, copy) void (^completion)(BOOL finished, CALayer *layer);
15 | @property (nonatomic, copy) void (^start)(void);
16 |
17 | - (void)setCompletion:(void (^)(BOOL finished, CALayer *layer))completion; // Forces auto-complete of setCompletion: to add the name 'finished' in the block parameter
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCPullRefresh/SCAnimationView.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCAnimationView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/3/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SCAnimationView : UIView
12 |
13 | @property (nonatomic, assign) CGFloat timeOffset; // 0.0 ~ 1.0
14 |
15 | - (void)beginRefreshing;
16 | - (void)endRefreshing;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCPullRefresh/SCPullRefreshViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCPullRefreshViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/4/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SCPullRefreshViewController : UIViewController
12 |
13 | @property (nonatomic, strong) UITableView *tableView;
14 |
15 | @property (nonatomic, assign, getter = isViewShowing) BOOL viewShowing;
16 | @property (nonatomic, assign, getter = isHiddenEnabled) BOOL hiddenEnabled;
17 |
18 | @property (nonatomic, assign) CGFloat tableViewInsertTop;
19 | @property (nonatomic, assign) CGFloat tableViewInsertBottom;
20 |
21 | @property (nonatomic, copy) void (^refreshBlock)();
22 |
23 | - (void)beginRefresh;
24 | - (void)endRefresh;
25 |
26 | @property (nonatomic, copy) void (^loadMoreBlock)();
27 |
28 | - (void)beginLoadMore;
29 | - (void)endLoadMore;
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCWeiboManager/SCWeiboManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCWeiboManager.h
3 | // SCWeiboManagerDemo
4 | //
5 | // Created by Singro on 6/4/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "WeiboSDK.h"
10 |
11 | #import "V2AppKeys.h"
12 |
13 | static NSString *const kWeiboRedirectUrl = @"https://api.weibo.com/oauth2/default.html";
14 |
15 | @interface SCWeiboManager : NSObject
16 |
17 | @property (nonatomic, readonly, getter = isExpired) BOOL expired;
18 |
19 | + (instancetype)manager;
20 |
21 | - (void)clean;
22 |
23 |
24 | #pragma mark - Authorize
25 |
26 | - (WBAuthorizeRequest *)authorizeToWeiboSuccess:(void (^)(WBBaseResponse *response))success
27 | failure:(void (^)(NSError *error))failure;
28 |
29 |
30 |
31 | #pragma mark - Send Weibo
32 |
33 | - (WBHttpRequest *)sendWeiboWithText:(NSString *)text
34 | Success:(void (^)(NSDictionary *responseDict))success
35 | failure:(void (^)(NSError *error))failure;
36 |
37 | - (WBHttpRequest *)sendWeiboWithText:(NSString *)text
38 | image:(UIImage *)image
39 | Success:(void (^)(NSDictionary *responseDict))success
40 | failure:(void (^)(NSError *error))failure;
41 |
42 | #pragma mark - Upload Image
43 |
44 | - (WBHttpRequest *)uploadImage:(UIImage *)image
45 | Success:(void (^)(NSURL *url))success
46 | failure:(void (^)(NSError *error))failure;
47 |
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCWeiboManager/WBRequest+Block.h:
--------------------------------------------------------------------------------
1 | //
2 | // WBHttpRequest+Block.h
3 | // newSponia
4 | //
5 | // Created by Singro on 5/31/14.
6 | // Copyright (c) 2014 Sponia. All rights reserved.
7 | //
8 |
9 | #import "WeiboSDK.h"
10 |
11 |
12 | @interface WBHttpRequest (block)
13 |
14 | @property (nonatomic, copy) void (^successBlock)(WBHttpRequest *reuqest, id responseObject);
15 | @property (nonatomic, copy) void (^failureBlock)(NSError *error);
16 |
17 | @end
18 |
19 | @interface WBBaseRequest (block)
20 |
21 | @property (nonatomic, copy) void (^successBlock)(WBBaseResponse *response);
22 | @property (nonatomic, copy) void (^failureBlock)(NSError *error);
23 |
24 | @end
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SCWeixinManager/SCWeixinManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCWeixinManager.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 8/8/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "WXApi.h"
10 |
11 | #import "V2AppKeys.h"
12 |
13 | @interface SCWeixinManager : NSObject
14 |
15 | + (instancetype)manager;
16 |
17 | - (void)shareWithWXScene:(enum WXScene)scene
18 | Title:(NSString *)title
19 | link:(NSString *)link
20 | description:(NSString *)description
21 | image:(UIImage *)image;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/NSData+ImageContentType.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Fabrice Aneche on 06/01/14.
3 | // Copyright (c) 2014 Dailymotion. All rights reserved.
4 | //
5 |
6 | #import
7 |
8 | @interface NSData (ImageContentType)
9 | + (NSString *)contentTypeForImageData:(NSData *)data;
10 | @end
11 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/NSData+ImageContentType.m:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Fabrice Aneche on 06/01/14.
3 | // Copyright (c) 2014 Dailymotion. All rights reserved.
4 | //
5 |
6 | #import "NSData+ImageContentType.h"
7 |
8 |
9 | @implementation NSData (ImageContentType)
10 |
11 | + (NSString *)contentTypeForImageData:(NSData *)data {
12 | uint8_t c;
13 | [data getBytes:&c length:1];
14 | switch (c) {
15 | case 0xFF:
16 | return @"image/jpeg";
17 | case 0x89:
18 | return @"image/png";
19 | case 0x47:
20 | return @"image/gif";
21 | case 0x49:
22 | case 0x4D:
23 | return @"image/tiff";
24 | case 0x52:
25 | // R as RIFF for WEBP
26 | if ([data length] < 12) {
27 | return nil;
28 | }
29 |
30 | NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
31 | if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
32 | return @"image/webp";
33 | }
34 |
35 | return nil;
36 | }
37 | return nil;
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/SDWebImageCompat.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | * (c) Jamie Pinkham
5 | *
6 | * For the full copyright and license information, please view the LICENSE
7 | * file that was distributed with this source code.
8 | */
9 |
10 | #import
11 |
12 | #ifdef __OBJC_GC__
13 | #error SDWebImage does not support Objective-C Garbage Collection
14 | #endif
15 |
16 | #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
17 | #error SDWebImage doesn't support Deployement Target version < 5.0
18 | #endif
19 |
20 | #if !TARGET_OS_IPHONE
21 | #import
22 | #ifndef UIImage
23 | #define UIImage NSImage
24 | #endif
25 | #ifndef UIImageView
26 | #define UIImageView NSImageView
27 | #endif
28 | #else
29 |
30 | #import
31 |
32 | #endif
33 |
34 | #ifndef NS_ENUM
35 | #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
36 | #endif
37 |
38 | #ifndef NS_OPTIONS
39 | #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
40 | #endif
41 |
42 | #if OS_OBJECT_USE_OBJC
43 | #undef SDDispatchQueueRelease
44 | #undef SDDispatchQueueSetterSementics
45 | #define SDDispatchQueueRelease(q)
46 | #define SDDispatchQueueSetterSementics strong
47 | #else
48 | #undef SDDispatchQueueRelease
49 | #undef SDDispatchQueueSetterSementics
50 | #define SDDispatchQueueRelease(q) (dispatch_release(q))
51 | #define SDDispatchQueueSetterSementics assign
52 | #endif
53 |
54 | extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image);
55 |
56 | #define dispatch_main_sync_safe(block)\
57 | if ([NSThread isMainThread]) {\
58 | block();\
59 | }\
60 | else {\
61 | dispatch_sync(dispatch_get_main_queue(), block);\
62 | }
63 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/SDWebImageCompat.m:
--------------------------------------------------------------------------------
1 | //
2 | // SDWebImageCompat.m
3 | // SDWebImage
4 | //
5 | // Created by Olivier Poitrey on 11/12/12.
6 | // Copyright (c) 2012 Dailymotion. All rights reserved.
7 | //
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | #if !__has_feature(objc_arc)
12 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag
13 | #endif
14 |
15 | inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) {
16 | if ([image.images count] > 0) {
17 | NSMutableArray *scaledImages = [NSMutableArray array];
18 |
19 | for (UIImage *tempImage in image.images) {
20 | [scaledImages addObject:SDScaledImageForKey(key, tempImage)];
21 | }
22 |
23 | return [UIImage animatedImageWithImages:scaledImages duration:image.duration];
24 | }
25 | else {
26 | if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
27 | CGFloat scale = 1.0;
28 | if (key.length >= 8) {
29 | // Search @2x. at the end of the string, before a 3 to 4 extension length (only if key len is 8 or more @2x. + 4 len ext)
30 | NSRange range = [key rangeOfString:@"@2x." options:0 range:NSMakeRange(key.length - 8, 5)];
31 | if (range.location != NSNotFound) {
32 | scale = 2.0;
33 | }
34 | }
35 |
36 | UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
37 | image = scaledImage;
38 | }
39 | return image;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/SDWebImageDecoder.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * Created by james on 9/28/11.
6 | *
7 | * For the full copyright and license information, please view the LICENSE
8 | * file that was distributed with this source code.
9 | */
10 |
11 | #import
12 | #import "SDWebImageCompat.h"
13 |
14 | @interface UIImage (ForceDecode)
15 |
16 | + (UIImage *)decodedImageWithImage:(UIImage *)image;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/SDWebImageDownloaderOperation.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageDownloader.h"
11 | #import "SDWebImageOperation.h"
12 |
13 | @interface SDWebImageDownloaderOperation : NSOperation
14 |
15 | @property (strong, nonatomic, readonly) NSURLRequest *request;
16 | @property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options;
17 |
18 | - (id)initWithRequest:(NSURLRequest *)request
19 | options:(SDWebImageDownloaderOptions)options
20 | progress:(SDWebImageDownloaderProgressBlock)progressBlock
21 | completed:(SDWebImageDownloaderCompletedBlock)completedBlock
22 | cancelled:(void (^)())cancelBlock;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/SDWebImageOperation.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 |
11 | @protocol SDWebImageOperation
12 |
13 | - (void)cancel;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/UIImage+GIF.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+GIF.h
3 | // LBGIFImage
4 | //
5 | // Created by Laurin Brandner on 06.01.12.
6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImage (GIF)
12 |
13 | + (UIImage *)sd_animatedGIFNamed:(NSString *)name;
14 |
15 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data;
16 |
17 | - (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/UIImage+MultiFormat.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+MultiFormat.h
3 | // SDWebImage
4 | //
5 | // Created by Olivier Poitrey on 07/06/13.
6 | // Copyright (c) 2013 Dailymotion. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImage (MultiFormat)
12 |
13 | + (UIImage *)sd_imageWithData:(NSData *)data;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/UIImage+MultiFormat.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+MultiFormat.m
3 | // SDWebImage
4 | //
5 | // Created by Olivier Poitrey on 07/06/13.
6 | // Copyright (c) 2013 Dailymotion. All rights reserved.
7 | //
8 |
9 | #import "UIImage+MultiFormat.h"
10 | #import "UIImage+GIF.h"
11 | #import "NSData+ImageContentType.h"
12 |
13 | #ifdef SD_WEBP
14 | #import "UIImage+WebP.h"
15 | #endif
16 |
17 | @implementation UIImage (MultiFormat)
18 |
19 | + (UIImage *)sd_imageWithData:(NSData *)data {
20 | UIImage *image;
21 | NSString *imageContentType = [NSData contentTypeForImageData:data];
22 | if ([imageContentType isEqualToString:@"image/gif"]) {
23 | image = [UIImage sd_animatedGIFWithData:data];
24 | }
25 | #ifdef SD_WEBP
26 | else if ([imageContentType isEqualToString:@"image/webp"])
27 | {
28 | image = [UIImage sd_imageWithWebPData:data];
29 | }
30 | #endif
31 | else {
32 | image = [[UIImage alloc] initWithData:data];
33 | }
34 |
35 |
36 | return image;
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SDWebImage/UIImage+WebP.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+WebP.h
3 | // SDWebImage
4 | //
5 | // Created by Olivier Poitrey on 07/06/13.
6 | // Copyright (c) 2013 Dailymotion. All rights reserved.
7 | //
8 |
9 | #ifdef SD_WEBP
10 |
11 | #import
12 |
13 | // Fix for issue #416 Undefined symbols for architecture armv7 since WebP introduction when deploying to device
14 | void WebPInitPremultiplyNEON(void);
15 |
16 | void WebPInitUpsamplersNEON(void);
17 |
18 | void VP8DspInitNEON(void);
19 |
20 | @interface UIImage (WebP)
21 |
22 | + (UIImage *)sd_imageWithWebPData:(NSData *)data;
23 |
24 | @end
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error-black.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error-black@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error-black@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/error@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success-black.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success-black@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success-black@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/SVProgressHUD/SVProgressHUD.bundle/success@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/libWeiboSDK/WeiboSDK.bundle/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/libWeiboSDK/WeiboSDK.bundle/images/close.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/libWeiboSDK/WeiboSDK.bundle/images/close@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/libWeiboSDK/WeiboSDK.bundle/images/close@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/libWeiboSDK/libWeiboSDK.a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/libWeiboSDK/libWeiboSDK.a
--------------------------------------------------------------------------------
/v2ex-iOS/Additions/libWeixinSDK/libWeChatSDK.a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Additions/libWeixinSDK/libWeChatSDK.a
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2CategoriesViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2CategoriesViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/7/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2CategoriesViewController : SCPullRefreshViewController
12 |
13 | @property (nonatomic, assign, getter = isFavorite) BOOL favorite;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2FavoriteViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2FavoriteViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/7/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2FavoriteViewController : SCPullRefreshViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2FavoriteViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2FavoriteViewController.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/7/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2FavoriteViewController.h"
10 |
11 | @interface V2FavoriteViewController ()
12 |
13 | @end
14 |
15 | @implementation V2FavoriteViewController
16 |
17 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
18 | {
19 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
20 | if (self) {
21 | // Custom initialization
22 | }
23 | return self;
24 | }
25 |
26 | - (void)viewDidLoad
27 | {
28 | [super viewDidLoad];
29 | // Do any additional setup after loading the view.
30 | }
31 |
32 | - (void)didReceiveMemoryWarning
33 | {
34 | [super didReceiveMemoryWarning];
35 | // Dispose of any resources that can be recreated.
36 | }
37 |
38 | /*
39 | #pragma mark - Navigation
40 |
41 | // In a storyboard-based application, you will often want to do a little preparation before navigation
42 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
43 | {
44 | // Get the new view controller using [segue destinationViewController].
45 | // Pass the selected object to the new view controller.
46 | }
47 | */
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2LatestViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2LatestViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2LatestViewController : SCPullRefreshViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2LoginViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2LoginViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/7/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2LoginViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2MemberRepliesViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberRepliesViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/14/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2MemberRepliesViewController : SCPullRefreshViewController
12 |
13 | @property (nonatomic, copy) NSString *memberName;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2MemberTopicsViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberTopicsViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/12/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2MemberTopicsViewController : SCPullRefreshViewController
12 |
13 | //@property (nonatomic, copy) NSString *memberName;
14 | @property (nonatomic, strong) V2MemberModel *model;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2MemberViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/28/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2MemberViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2MemberViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberViewController.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/28/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2MemberViewController.h"
10 |
11 | @interface V2MemberViewController ()
12 |
13 | @end
14 |
15 | @implementation V2MemberViewController
16 |
17 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
18 | {
19 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
20 | if (self) {
21 | // Custom initialization
22 | }
23 | return self;
24 | }
25 |
26 | - (void)viewDidLoad
27 | {
28 | [super viewDidLoad];
29 | // Do any additional setup after loading the view.
30 | }
31 |
32 | - (void)didReceiveMemoryWarning
33 | {
34 | [super didReceiveMemoryWarning];
35 | // Dispose of any resources that can be recreated.
36 | }
37 |
38 | /*
39 | #pragma mark - Navigation
40 |
41 | // In a storyboard-based application, you will often want to do a little preparation before navigation
42 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
43 | {
44 | // Get the new view controller using [segue destinationViewController].
45 | // Pass the selected object to the new view controller.
46 | }
47 | */
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2NodeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodeViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/27/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2NodeViewController : SCPullRefreshViewController
12 |
13 | @property (nonatomic, strong) V2NodeModel *model;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2NodesViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodesViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2NodesViewController : SCPullRefreshViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2NotificationViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NotificationViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/5/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2NotificationViewController : SCPullRefreshViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2ProfileViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2ProfileViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/7/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2ProfileViewController : SCPullRefreshViewController
12 |
13 | @property (nonatomic, assign) BOOL isSelf;
14 | @property (nonatomic, copy) NSString *username;
15 | @property (nonatomic, strong) V2MemberModel *member;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2RootViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2RootViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef NS_ENUM(NSUInteger, V2SectionIndex) {
12 | V2SectionIndexLatest = 0,
13 | V2SectionIndexCategories = 1,
14 | V2SectionIndexNodes = 2,
15 | V2SectionIndexFavorite = 3,
16 | V2SectionIndexNotification = 4,
17 | V2SectionIndexProfile = 5,
18 | };
19 |
20 | @interface V2RootViewController : UIViewController
21 |
22 | - (void)showViewControllerAtIndex:(V2SectionIndex)index animated:(BOOL)animated;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2SettingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SettingViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2SettingViewController : SCPullRefreshViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2TopicCreateViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicCreateViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/1/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicCreateViewController : UIViewController
12 |
13 | @property (nonatomic, copy) NSString *nodeName;
14 |
15 | @end
16 |
17 |
18 | static NSString * const kTopicCreateSuccessNotification = @"TopicCreateSuccessNotification";
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2TopicViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "SCPullRefreshViewController.h"
10 |
11 | @interface V2TopicViewController : SCPullRefreshViewController
12 |
13 | @property (nonatomic, assign, getter = isCreate) BOOL create;
14 | @property (nonatomic, assign, getter = isPreview) BOOL preview;
15 |
16 | @property (nonatomic, strong) V2TopicModel *model;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2WebViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2WebViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 8/1/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2WebViewController : UIViewController
12 |
13 | @property (nonatomic, strong) NSURL *url;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Controllers/V2WeiboViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2WeiboViewController.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/30/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2WeiboViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/Crashlytics:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Frameworks/Crashlytics.framework/Crashlytics
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/Headers/ANSCompatibility.h:
--------------------------------------------------------------------------------
1 | //
2 | // ANSCompatibility.h
3 | // AnswersKit
4 | //
5 | // Copyright (c) 2015 Crashlytics, Inc. All rights reserved.
6 | //
7 |
8 | #pragma once
9 |
10 | #if !__has_feature(nullability)
11 | #define nonnull
12 | #define nullable
13 | #define _Nullable
14 | #define _Nonnull
15 | #endif
16 |
17 | #ifndef NS_ASSUME_NONNULL_BEGIN
18 | #define NS_ASSUME_NONNULL_BEGIN
19 | #endif
20 |
21 | #ifndef NS_ASSUME_NONNULL_END
22 | #define NS_ASSUME_NONNULL_END
23 | #endif
24 |
25 | #if __has_feature(objc_generics)
26 | #define ANS_GENERIC_NSARRAY(type) NSArray
27 | #define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary
28 | #else
29 | #define ANS_GENERIC_NSARRAY(type) NSArray
30 | #define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary
31 | #endif
32 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/Headers/CLSAttributes.h:
--------------------------------------------------------------------------------
1 | //
2 | // CLSAttributes.h
3 | // Crashlytics
4 | //
5 | // Copyright (c) 2015 Crashlytics, Inc. All rights reserved.
6 | //
7 |
8 | #pragma once
9 |
10 | #define CLS_DEPRECATED(x) __attribute__ ((deprecated(x)))
11 |
12 | #if !__has_feature(nullability)
13 | #define nonnull
14 | #define nullable
15 | #define _Nullable
16 | #define _Nonnull
17 | #endif
18 |
19 | #ifndef NS_ASSUME_NONNULL_BEGIN
20 | #define NS_ASSUME_NONNULL_BEGIN
21 | #endif
22 |
23 | #ifndef NS_ASSUME_NONNULL_END
24 | #define NS_ASSUME_NONNULL_END
25 | #endif
26 |
27 | #if __has_feature(objc_generics)
28 | #define CLS_GENERIC_NSARRAY(type) NSArray
29 | #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary
30 | #else
31 | #define CLS_GENERIC_NSARRAY(type) NSArray
32 | #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary
33 | #endif
34 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/Headers/CLSStackFrame.h:
--------------------------------------------------------------------------------
1 | //
2 | // CLSStackFrame.h
3 | // Crashlytics
4 | //
5 | // Copyright 2015 Crashlytics, Inc. All rights reserved.
6 | //
7 |
8 | #import
9 | #import "CLSAttributes.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | /**
14 | *
15 | * This class is used in conjunction with -[Crashlytics recordCustomExceptionName:reason:frameArray:] to
16 | * record information about non-ObjC/C++ exceptions. All information included here will be displayed
17 | * in the Crashlytics UI, and can influence crash grouping. Be particularly careful with the use of the
18 | * address property. If set, Crashlytics will attempt symbolication and could overwrite other properities
19 | * in the process.
20 | *
21 | **/
22 | @interface CLSStackFrame : NSObject
23 |
24 | + (instancetype)stackFrame;
25 | + (instancetype)stackFrameWithAddress:(NSUInteger)address;
26 | + (instancetype)stackFrameWithSymbol:(NSString *)symbol;
27 |
28 | @property (nonatomic, copy, nullable) NSString *symbol;
29 | @property (nonatomic, copy, nullable) NSString *library;
30 | @property (nonatomic, copy, nullable) NSString *fileName;
31 | @property (nonatomic, assign) uint32_t lineNumber;
32 | @property (nonatomic, assign) uint64_t offset;
33 | @property (nonatomic, assign) uint64_t address;
34 |
35 | @end
36 |
37 | NS_ASSUME_NONNULL_END
38 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 14F1021
7 | CFBundleDevelopmentRegion
8 | English
9 | CFBundleExecutable
10 | Crashlytics
11 | CFBundleIdentifier
12 | com.twitter.crashlytics.ios
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | Crashlytics
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 3.7.0
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | iPhoneOS
26 |
27 | CFBundleVersion
28 | 102
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 13B137
33 | DTPlatformName
34 | iphoneos
35 | DTPlatformVersion
36 | 9.1
37 | DTSDKBuild
38 | 13B137
39 | DTSDKName
40 | iphoneos9.1
41 | DTXcode
42 | 0710
43 | DTXcodeBuild
44 | 7B91b
45 | MinimumOSVersion
46 | 6.0
47 | NSHumanReadableCopyright
48 | Copyright © 2015 Crashlytics, Inc. All rights reserved.
49 | UIDeviceFamily
50 |
51 | 1
52 | 2
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module Crashlytics {
2 | header "Crashlytics.h"
3 | header "Answers.h"
4 | header "ANSCompatibility.h"
5 | header "CLSLogging.h"
6 | header "CLSReport.h"
7 | header "CLSStackFrame.h"
8 | header "CLSAttributes.h"
9 |
10 | export *
11 |
12 | link "z"
13 | link "c++"
14 | }
15 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/run:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # run
4 | #
5 | # Copyright (c) 2015 Crashlytics. All rights reserved.
6 |
7 | # Figure out where we're being called from
8 | DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
9 |
10 | # Quote path in case of spaces or special chars
11 | DIR="\"${DIR}"
12 |
13 | PATH_SEP="/"
14 | VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script"
15 | UPLOAD_COMMAND="uploadDSYM\" $@ run-script"
16 |
17 | # Ensure params are as expected, run in sync mode to validate
18 | eval $DIR$PATH_SEP$VALIDATE_COMMAND
19 | return_code=$?
20 |
21 | if [[ $return_code != 0 ]]; then
22 | exit $return_code
23 | fi
24 |
25 | # Verification passed, upload dSYM in background to prevent Xcode from waiting
26 | # Note: Validation is performed again before upload.
27 | # Output can still be found in Console.app
28 | eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 &
29 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/submit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Frameworks/Crashlytics.framework/submit
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Crashlytics.framework/uploadDSYM:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Frameworks/Crashlytics.framework/uploadDSYM
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Fabric:
--------------------------------------------------------------------------------
1 | Versions/Current/Fabric
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Headers:
--------------------------------------------------------------------------------
1 | Versions/Current/Headers
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Modules:
--------------------------------------------------------------------------------
1 | Versions/Current/Modules
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Versions/A/Fabric:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Frameworks/Fabric.framework/Versions/A/Fabric
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Versions/A/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module Fabric {
2 | umbrella header "Fabric.h"
3 |
4 | export *
5 | module * { export * }
6 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleGetInfoString
8 | Fabric Framework
9 | CFBundleIdentifier
10 | io.fabric.sdk.ios
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | Fabric
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.1.1
19 | CFBundleSupportedPlatforms
20 |
21 | iPhoneOS
22 | iPhoneSimulator
23 | MacOSX
24 |
25 | CFBundleVersion
26 | 1.1.1
27 | NSHumanReadableCopyright
28 | Copyright 2014 Twitter Inc.
29 |
30 |
31 |
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/v2ex-iOS/Frameworks/Fabric.framework/run:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Frameworks/Fabric.framework/run
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_favorite.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "action_favorite@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "action_favorite@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_favorite.imageset/action_favorite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_favorite.imageset/action_favorite@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_favorite.imageset/action_favorite@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_favorite.imageset/action_favorite@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_forbidden.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "action_forbidden@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "action_forbidden@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_forbidden.imageset/action_forbidden@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_forbidden.imageset/action_forbidden@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_forbidden.imageset/action_forbidden@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_forbidden.imageset/action_forbidden@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_safari.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "action_safari@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "action_safari@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_safari.imageset/action_safari@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_safari.imageset/action_safari@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_safari.imageset/action_safari@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_safari.imageset/action_safari@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_thank.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "action_thank@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "action_thank@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_thank.imageset/action_thank@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_thank.imageset/action_thank@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/action_thank.imageset/action_thank@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/action_thank.imageset/action_thank@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_twitter.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "share_twitter@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "share_twitter@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_twitter.imageset/share_twitter@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_twitter.imageset/share_twitter@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_twitter.imageset/share_twitter@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_twitter.imageset/share_twitter@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_wechat_friends.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "share_wechat_friends@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "share_wechat_friends@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_wechat_friends.imageset/share_wechat_friends@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_wechat_friends.imageset/share_wechat_friends@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_wechat_friends.imageset/share_wechat_friends@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_wechat_friends.imageset/share_wechat_friends@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_wechat_moments.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "share_wechat_moments@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "share_wechat_moments@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_wechat_moments.imageset/share_wechat_moments@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_wechat_moments.imageset/share_wechat_moments@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_wechat_moments.imageset/share_wechat_moments@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_wechat_moments.imageset/share_wechat_moments@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_weibo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "share_weibo@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "share_weibo@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_weibo.imageset/share_weibo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_weibo.imageset/share_weibo@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Action/share_weibo.imageset/share_weibo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Action/share_weibo.imageset/share_weibo@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-120.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-29.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-29@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-29@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-40.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-40@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-58.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-76.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-80.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/37x-Checkmark.imageset/37x-Checkmark@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/37x-Checkmark.imageset/37x-Checkmark@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/37x-Checkmark.imageset/37x-Checkmark@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/37x-Checkmark.imageset/37x-Checkmark@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/37x-Checkmark.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "37x-Checkmark@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "37x-Checkmark@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Arrow.imageset/Arrow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Arrow.imageset/Arrow@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Arrow.imageset/Arrow@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Arrow.imageset/Arrow@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Arrow.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "Arrow@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "Arrow@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Backward.imageset/Browser_Icon_Backward@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Backward.imageset/Browser_Icon_Backward@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Backward.imageset/Browser_Icon_Backward@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Backward.imageset/Browser_Icon_Backward@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Backward.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "Browser_Icon_Backward@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "Browser_Icon_Backward@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Forward.imageset/Browser_Icon_Forward@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Forward.imageset/Browser_Icon_Forward@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Forward.imageset/Browser_Icon_Forward@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Forward.imageset/Browser_Icon_Forward@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Forward.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "Browser_Icon_Forward@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "Browser_Icon_Forward@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Refresh.imageset/Browser_Icon_Refresh@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Refresh.imageset/Browser_Icon_Refresh@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Refresh.imageset/Browser_Icon_Refresh@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Refresh.imageset/Browser_Icon_Refresh@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Browser_Icon_Refresh.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "Browser_Icon_Refresh@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "Browser_Icon_Refresh@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Default-568_blurred.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Default-568_blurred@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Default-568_blurred.imageset/Default-568_blurred@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Default-568_blurred.imageset/Default-568_blurred@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Navi_Shadow.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "Navi_Shadow@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "Navi_Shadow@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Navi_Shadow.imageset/Navi_Shadow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Navi_Shadow.imageset/Navi_Shadow@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/Navi_Shadow.imageset/Navi_Shadow@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/Navi_Shadow.imageset/Navi_Shadow@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/avatar_default.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "avatar_default@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "avatar_default@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/avatar_default.imageset/avatar_default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/avatar_default.imageset/avatar_default@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/avatar_default.imageset/avatar_default@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/avatar_default.imageset/avatar_default@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/close.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "close@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "close@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/close.imageset/close@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/close.imageset/close@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/close.imageset/close@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/close.imageset/close@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/default_avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "default_avatar@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "default_avatar@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/default_avatar.imageset/default_avatar@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/default_avatar.imageset/default_avatar@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/default_avatar.imageset/default_avatar@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/default_avatar.imageset/default_avatar@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon.imageset/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon.imageset/icon@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon.imageset/icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon.imageset/icon@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_fav.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_fav@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_fav@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_fav.imageset/icon_fav@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_fav.imageset/icon_fav@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_fav.imageset/icon_fav@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_fav.imageset/icon_fav@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_post.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_post@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_post@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_post.imageset/icon_post@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_post.imageset/icon_post@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_post.imageset/icon_post@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_post.imageset/icon_post@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_post_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_post_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_post_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_post_highlighted.imageset/icon_post_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_post_highlighted.imageset/icon_post_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_post_highlighted.imageset/icon_post_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_post_highlighted.imageset/icon_post_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_reply.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_reply@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_reply@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_reply.imageset/icon_reply@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_reply.imageset/icon_reply@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_reply.imageset/icon_reply@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_reply.imageset/icon_reply@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_reply_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_reply_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_reply_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_reply_highlighted.imageset/icon_reply_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_reply_highlighted.imageset/icon_reply_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_reply_highlighted.imageset/icon_reply_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_reply_highlighted.imageset/icon_reply_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_setting.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_setting@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_setting@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_setting.imageset/icon_setting@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_setting.imageset/icon_setting@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_setting.imageset/icon_setting@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_setting.imageset/icon_setting@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_share.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "icon_share@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "icon_share@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_share.imageset/icon_share@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_share.imageset/icon_share@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/icon_share.imageset/icon_share@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/icon_share.imageset/icon_share@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/nav_comment.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "nav_comment@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "nav_comment@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/nav_comment.imageset/nav_comment@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/nav_comment.imageset/nav_comment@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/nav_comment.imageset/nav_comment@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/nav_comment.imageset/nav_comment@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_add.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_add@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_add@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_add.imageset/navi_add@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_add.imageset/navi_add@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_add.imageset/navi_add@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_add.imageset/navi_add@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_back.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_back@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_back@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_back.imageset/navi_back@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_back.imageset/navi_back@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_back.imageset/navi_back@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_back.imageset/navi_back@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_contract.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_contract@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_contract@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_contract.imageset/navi_contract@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_contract.imageset/navi_contract@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_contract.imageset/navi_contract@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_contract.imageset/navi_contract@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_done.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_done@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_done@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_done.imageset/navi_done@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_done.imageset/navi_done@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_done.imageset/navi_done@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_done.imageset/navi_done@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_dot.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_dot@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_dot@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_dot.imageset/navi_dot@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_dot.imageset/navi_dot@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_dot.imageset/navi_dot@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_dot.imageset/navi_dot@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_expend.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_expend@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_expend@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_expend.imageset/navi_expend@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_expend.imageset/navi_expend@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_expend.imageset/navi_expend@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_expend.imageset/navi_expend@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_mask.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_mask@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_mask@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_mask.imageset/navi_mask@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_mask.imageset/navi_mask@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_mask.imageset/navi_mask@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_mask.imageset/navi_mask@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_menu.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_menu@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_menu@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_menu.imageset/navi_menu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_menu.imageset/navi_menu@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_menu.imageset/navi_menu@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_menu.imageset/navi_menu@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_menu_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_menu_2@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_menu_2@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_menu_2.imageset/navi_menu_2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_menu_2.imageset/navi_menu_2@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_menu_2.imageset/navi_menu_2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_menu_2.imageset/navi_menu_2@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_more.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "navi_more@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "navi_more@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_more.imageset/navi_more@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_more.imageset/navi_more@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/navi_more.imageset/navi_more@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/navi_more.imageset/navi_more@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/topic_placeholder.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "topic_placeholder@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "topic_placeholder@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/topic_placeholder.imageset/topic_placeholder@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/topic_placeholder.imageset/topic_placeholder@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Common/topic_placeholder.imageset/topic_placeholder@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Common/topic_placeholder.imageset/topic_placeholder@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1024h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1024h.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1024h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1024h@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1104h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1104h@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1218h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-1218h@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/LaunchImage.launchimage/Default@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_link.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "profile_link@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "profile_link@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_link.imageset/profile_link@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_link.imageset/profile_link@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_link.imageset/profile_link@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_link.imageset/profile_link@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_location.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "profile_location@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "profile_location@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_location.imageset/profile_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_location.imageset/profile_location@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_location.imageset/profile_location@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_location.imageset/profile_location@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_reply.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "profile_reply@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "profile_reply@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_reply.imageset/profile_reply@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_reply.imageset/profile_reply@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_reply.imageset/profile_reply@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_reply.imageset/profile_reply@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_topic.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "profile_topic@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "profile_topic@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_topic.imageset/profile_topic@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_topic.imageset/profile_topic@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_topic.imageset/profile_topic@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_topic.imageset/profile_topic@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_twitter.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "profile_twitter@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "profile_twitter@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_twitter.imageset/profile_twitter@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_twitter.imageset/profile_twitter@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/profile_twitter.imageset/profile_twitter@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/profile_twitter.imageset/profile_twitter@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/quick_checkin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "quick_checkin@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "quick_checkin@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/quick_checkin.imageset/quick_checkin@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/quick_checkin.imageset/quick_checkin@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Profile/quick_checkin.imageset/quick_checkin@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Profile/quick_checkin.imageset/quick_checkin@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_categories.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_categories@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_categories@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_categories.imageset/section_categories@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_categories.imageset/section_categories@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_categories.imageset/section_categories@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_categories.imageset/section_categories@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_categories_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_categories_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_categories_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_categories_highlighted.imageset/section_categories_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_categories_highlighted.imageset/section_categories_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_categories_highlighted.imageset/section_categories_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_categories_highlighted.imageset/section_categories_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_divide.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_divide@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_divide@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_divide.imageset/section_divide@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_divide.imageset/section_divide@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_divide.imageset/section_divide@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_divide.imageset/section_divide@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_fav.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_fav@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_fav@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_fav.imageset/section_fav@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_fav.imageset/section_fav@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_fav.imageset/section_fav@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_fav.imageset/section_fav@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_fav_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_fav_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_fav_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_fav_highlighted.imageset/section_fav_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_fav_highlighted.imageset/section_fav_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_fav_highlighted.imageset/section_fav_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_fav_highlighted.imageset/section_fav_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_latest.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_latest@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_latest@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_latest.imageset/section_latest@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_latest.imageset/section_latest@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_latest.imageset/section_latest@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_latest.imageset/section_latest@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_latest_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_latest_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_latest_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_latest_highlighted.imageset/section_latest_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_latest_highlighted.imageset/section_latest_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_latest_highlighted.imageset/section_latest_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_latest_highlighted.imageset/section_latest_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_message.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_message@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_message@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_message.imageset/section_message@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_message.imageset/section_message@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_message.imageset/section_message@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_message.imageset/section_message@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_message_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_message_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_message_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_message_highlighted.imageset/section_message_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_message_highlighted.imageset/section_message_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_message_highlighted.imageset/section_message_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_message_highlighted.imageset/section_message_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_nodes.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_nodes@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_nodes@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_nodes.imageset/section_nodes@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_nodes.imageset/section_nodes@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_nodes.imageset/section_nodes@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_nodes.imageset/section_nodes@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_nodes_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_nodes_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_nodes_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_nodes_highlighted.imageset/section_nodes_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_nodes_highlighted.imageset/section_nodes_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_nodes_highlighted.imageset/section_nodes_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_nodes_highlighted.imageset/section_nodes_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_notification.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_notification@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_notification@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_notification.imageset/section_notification@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_notification.imageset/section_notification@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_notification.imageset/section_notification@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_notification.imageset/section_notification@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_notification_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_notification_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_notification_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_notification_highlighted.imageset/section_notification_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_notification_highlighted.imageset/section_notification_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_notification_highlighted.imageset/section_notification_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_notification_highlighted.imageset/section_notification_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_profile@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_profile@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_profile.imageset/section_profile@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_profile.imageset/section_profile@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_profile.imageset/section_profile@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_profile.imageset/section_profile@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_profile_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_profile_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_profile_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_profile_highlighted.imageset/section_profile_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_profile_highlighted.imageset/section_profile_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_profile_highlighted.imageset/section_profile_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_profile_highlighted.imageset/section_profile_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_setting.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_setting@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_setting@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_setting.imageset/section_setting@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_setting.imageset/section_setting@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_setting.imageset/section_setting@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_setting.imageset/section_setting@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_setting_highlighted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "section_setting_highlighted@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x",
15 | "filename" : "section_setting_highlighted@3x.png"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_setting_highlighted.imageset/section_setting_highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_setting_highlighted.imageset/section_setting_highlighted@2x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Images.xcassets/Section/section_setting_highlighted.imageset/section_setting_highlighted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Images.xcassets/Section/section_setting_highlighted.imageset/section_setting_highlighted@3x.png
--------------------------------------------------------------------------------
/v2ex-iOS/Managers/V2CheckInManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2CheckInManager.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 7/6/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2CheckInManager : NSObject
12 |
13 | @property (nonatomic, assign) NSInteger checkInCount;
14 | @property (nonatomic, assign, getter = isExpired) BOOL expired;
15 |
16 | + (instancetype)manager;
17 |
18 | - (void)resetStatus;
19 |
20 | - (void)updateStatus;
21 |
22 | - (void)removeStatus;
23 |
24 | - (NSURLSessionDataTask *)checkInSuccess:(void (^)(NSInteger count))success
25 | failure:(void (^)(NSError *error))failure;
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/v2ex-iOS/Managers/V2NotificationManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NotificationManager.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/5/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | @class V2NotificationList;
10 |
11 | @interface V2NotificationManager : NSObject
12 |
13 | + (instancetype)manager;
14 |
15 | @property (nonatomic, assign) NSInteger unreadCount;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Managers/V2NotificationManager.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2NotificationManager.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/5/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2NotificationManager.h"
10 |
11 | #import "V2NotificationModel.h"
12 |
13 | #import
14 |
15 | static NSString *const kNofiticationStoreFilePath = @"/notification.plist";
16 |
17 | @interface V2NotificationManager ()
18 |
19 | @property (nonatomic, strong) NSDate *lastUpdateDate;
20 |
21 | @end
22 |
23 | @implementation V2NotificationManager
24 |
25 | - (instancetype)init {
26 | if (self = [super init]) {
27 |
28 | NSString* path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
29 | NSString *filePath = [path stringByAppendingString:kNofiticationStoreFilePath];
30 |
31 | if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
32 |
33 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
34 |
35 | // NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
36 |
37 | });
38 |
39 | } else {
40 | // self.topicStateDictionary = [[NSMutableDictionary alloc] init];
41 | }
42 |
43 | // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveLeaveAppNotification) name:UIApplicationWillResignActiveNotification object:nil];
44 |
45 | }
46 | return self;
47 | }
48 |
49 | + (instancetype)manager {
50 | static V2NotificationManager *manager = nil;
51 | static dispatch_once_t onceToken;
52 | dispatch_once(&onceToken, ^{
53 | manager = [[V2NotificationManager alloc] init];
54 | });
55 | return manager;
56 | }
57 |
58 | @end
59 |
--------------------------------------------------------------------------------
/v2ex-iOS/Managers/V2QuickActionManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2QuickActionManager.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 11/15/15.
6 | // Copyright © 2015 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | FOUNDATION_EXPORT NSString * V2CheckInQuickAction;
12 | FOUNDATION_EXPORT NSString * V2NotificationQuickAction;
13 |
14 | @interface V2QuickActionManager : NSObject
15 |
16 | + (instancetype)manager;
17 |
18 | - (void)updateAction;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/v2ex-iOS/Managers/V2TopicStateManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicStateManager.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/22/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2TopicModel.h"
10 |
11 | @interface V2TopicStateManager : NSObject
12 |
13 | + (instancetype)manager;
14 |
15 | - (V2TopicState)getTopicStateWithTopicModel:(V2TopicModel *)model;
16 |
17 | - (BOOL)saveStateForTopicModel:(V2TopicModel *)model;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2BaseModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2BaseModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2BaseModel : NSObject
12 |
13 | - (instancetype)initWithDictionary:(NSDictionary *)dict;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2BaseModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2BaseModel.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2BaseModel.h"
10 |
11 | @implementation V2BaseModel
12 |
13 | - (instancetype)initWithDictionary:(NSDictionary *)dict {
14 | if (self = [super init]) {
15 | }
16 |
17 | return self;
18 | }
19 |
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2MemberModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2BaseModel.h"
10 |
11 | @interface V2MemberModel : V2BaseModel
12 |
13 | @property (nonatomic, copy) NSString *memberId;
14 | @property (nonatomic, copy) NSString *memberName;
15 | @property (nonatomic, copy) NSString *memberAvatarMini;
16 | @property (nonatomic, copy) NSString *memberAvatarNormal;
17 | @property (nonatomic, copy) NSString *memberAvatarLarge;
18 | @property (nonatomic, copy) NSString *memberTagline;
19 |
20 | @property (nonatomic, copy) NSString *memberBio;
21 | @property (nonatomic, copy) NSString *memberCreated;
22 | @property (nonatomic, copy) NSString *memberLocation;
23 | @property (nonatomic, copy) NSString *memberStatus;
24 | @property (nonatomic, copy) NSString *memberTwitter;
25 | @property (nonatomic, copy) NSString *memberUrl;
26 | @property (nonatomic, copy) NSString *memberWebsite;
27 |
28 |
29 | @end
30 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2MemberReplyModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberReplyModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/14/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2MemberReplyModel : NSObject
12 |
13 | @property (nonatomic, copy ) NSString *memberReplyContent;
14 | @property (nonatomic, copy ) NSString *memberReplyCreatedDescription;
15 |
16 | @property (nonatomic, copy ) NSAttributedString *memberReplyTopAttributedString;
17 | @property (nonatomic, copy ) NSAttributedString *memberReplyContentAttributedString;
18 |
19 | @property (nonatomic, strong) V2TopicModel *memberReplyTopic;
20 |
21 | @end
22 |
23 | @interface V2MemberReplyList : NSObject
24 |
25 | @property (nonatomic, strong) NSArray *list;
26 |
27 | + (V2MemberReplyList *)getMemberReplyListFromResponseObject:(id)responseObject;
28 |
29 | @end
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2NodeModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodeModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2BaseModel.h"
10 |
11 | @interface V2NodeModel : V2BaseModel
12 |
13 | @property (nonatomic, copy) NSString *nodeId;
14 | @property (nonatomic, copy) NSString *nodeName;
15 | @property (nonatomic, copy) NSString *nodeUrl;
16 | @property (nonatomic, copy) NSString *nodeTitle;
17 | @property (nonatomic, copy) NSString *nodeTitleAlternative;
18 | @property (nonatomic, copy) NSString *nodeTopicCount;
19 | @property (nonatomic, copy) NSString *nodeHeader;
20 | @property (nonatomic, copy) NSString *nodeFooter;
21 | @property (nonatomic, copy) NSString *nodeCreated;
22 |
23 | @end
24 |
25 | @interface V2NodeList : NSObject
26 |
27 | @property (nonatomic, strong) NSArray *list;
28 |
29 | - (instancetype)initWithArray:(NSArray *)array;
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2NodeModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodeModel.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2NodeModel.h"
10 |
11 | @implementation V2NodeModel
12 |
13 | - (instancetype)initWithDictionary:(NSDictionary *)dict {
14 | if (self = [super initWithDictionary:dict]) {
15 |
16 | self.nodeId = [dict objectForSafeKey:@"id"];
17 | self.nodeName = [dict objectForSafeKey:@"name"];
18 | self.nodeUrl = [dict objectForSafeKey:@"url"];
19 | self.nodeTitle = [dict objectForSafeKey:@"title"];
20 | self.nodeTitleAlternative = [dict objectForSafeKey:@"title_alternative"];
21 | self.nodeTopicCount = [dict objectForSafeKey:@"topics"];
22 | self.nodeHeader = [dict objectForSafeKey:@"header"];
23 | self.nodeFooter = [dict objectForSafeKey:@"footer"];
24 | self.nodeCreated = [dict objectForSafeKey:@"created"];
25 |
26 | }
27 |
28 | return self;
29 | }
30 |
31 | @end
32 |
33 |
34 | @implementation V2NodeList
35 |
36 | - (instancetype)initWithArray:(NSArray *)array {
37 | if (self = [super init]) {
38 |
39 | NSMutableArray *list = [[NSMutableArray alloc] init];
40 |
41 | for (NSDictionary *dict in array) {
42 | V2NodeModel *model = [[V2NodeModel alloc] initWithDictionary:dict];
43 | [list addObject:model];
44 | }
45 |
46 | self.list = list;
47 |
48 | }
49 |
50 | return self;
51 | }
52 |
53 | @end
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2NotificationModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NotificationModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/5/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2NotificationModel : NSObject
12 |
13 | @property (nonatomic, copy) NSString *notificationDescriptionBefore;
14 | @property (nonatomic, copy) NSString *notificationDescriptionAfter;
15 | @property (nonatomic, copy) NSString *notificationContent;
16 | @property (nonatomic, copy) NSString *notificationCreatedDescription;
17 | @property (nonatomic, copy) NSString *notificationId;
18 |
19 | @property (nonatomic, copy) NSAttributedString *notificationTopAttributedString;
20 | @property (nonatomic, copy) NSAttributedString *notificationDescriptionAttributedString;
21 |
22 | @property (nonatomic, strong) V2TopicModel *notificationTopic;
23 | @property (nonatomic, strong) V2MemberModel *notificationMember;
24 |
25 | @end
26 |
27 | @interface V2NotificationList : NSObject
28 |
29 | @property (nonatomic, strong) NSArray *list;
30 |
31 | + (V2NotificationList *)getNotificationFromResponseObject:(id)responseObject;
32 |
33 | @end
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2ReplyModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2ReplyModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2BaseModel.h"
10 |
11 | @class V2MemberModel;
12 |
13 | @interface V2ReplyModel : V2BaseModel
14 |
15 | @property (nonatomic, copy ) NSString *replyId;
16 | @property (nonatomic, copy ) NSString *replyThanksCount;
17 | @property (nonatomic, copy ) NSString *replyModified;
18 | @property (nonatomic, strong) NSNumber *replyCreated;
19 | @property (nonatomic, copy ) NSString *replyContent;
20 | @property (nonatomic, copy ) NSString *replyContentRendered;
21 |
22 | @property (nonatomic, strong) NSArray *quoteArray;
23 | @property (nonatomic, copy ) NSAttributedString *attributedString;
24 | @property (nonatomic, strong) NSArray *contentArray;
25 | @property (nonatomic, strong) NSArray *imageURLs;
26 |
27 | @property (nonatomic, strong) V2MemberModel *replyCreator;
28 |
29 | @end
30 |
31 |
32 | @interface V2ReplyList : NSObject
33 |
34 | @property (nonatomic, strong) NSArray *list;
35 |
36 | - (instancetype)initWithArray:(NSArray *)array;
37 |
38 | @end
39 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2UserModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2UserModel.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/6/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2UserModel : NSObject
12 |
13 | @property (nonatomic, strong) V2MemberModel *member;
14 |
15 | @property (nonatomic, copy) NSString *name;
16 |
17 | @property (nonatomic, strong) NSURL *feedURL;
18 |
19 | @property (nonatomic, assign, getter = isLogin) BOOL login;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/Models/V2UserModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2UserModel.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/6/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2UserModel.h"
10 |
11 | @implementation V2UserModel
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Resources/Hahu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Resources/Hahu.png
--------------------------------------------------------------------------------
/v2ex-iOS/Resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/singro/v2ex/c8ffba334555e7c60060eba1aae45bcce4a6f8f2/v2ex-iOS/Resources/icon.png
--------------------------------------------------------------------------------
/v2ex-iOS/V2AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCAppDelegate.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "SCNavigationController.h"
12 |
13 | @class V2RootViewController;
14 | @interface V2AppDelegate : UIResponder
15 |
16 | @property (strong, nonatomic) UIWindow *window;
17 | //@property (nonatomic, strong) SCNavigationController *navigationController;
18 | @property (nonatomic, strong) V2RootViewController *rootViewController;
19 | @property (nonatomic, assign) SCNavigationController *currentNavigationController;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/V2AppKeys.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2AppKeys.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/3/15.
6 | // Copyright (c) 2015 Singro. All rights reserved.
7 | //
8 |
9 | #ifndef v2ex_iOS_V2AppKeys_h
10 | #define v2ex_iOS_V2AppKeys_h
11 |
12 | static NSString *const kWeiboAppKey = @"3134205259";
13 | static NSString *const kWeixinAppKey = @"wxd5d7241e8caa7456";
14 |
15 | #endif
16 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2ActionCellView.h:
--------------------------------------------------------------------------------
1 | //
2 | // KSActionShareView.h
3 | // KeyShare
4 | //
5 | // Created by Singro on 12/29/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "SCActionSheet.h"
12 |
13 | @interface V2ActionCellView : UIView
14 |
15 | @property (nonatomic, weak) SCActionSheet *actionSheet;
16 |
17 | - (instancetype)initWithTitles:(NSArray *)titles imageNames:(NSArray *)imageNames;
18 |
19 | - (void)sc_setButtonHandler:(void (^)(void))block forIndex:(NSInteger)index;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2ActionItemView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2ActionItemView.h
3 | // KeyShare
4 | //
5 | // Created by Singro on 12/29/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | static CGFloat const kItemHeight = 80;
12 | static CGFloat const kItemHeightTitle = 100;
13 | static CGFloat const kItemWidth = 50.;
14 | static CGFloat const kTitleFontSize = 11;
15 |
16 | @interface V2ActionItemView : UIView
17 |
18 | @property (nonatomic, copy) void (^actionBlock)(UIButton *button, UILabel *label);
19 |
20 | - (instancetype)initWithTitle:(NSString *)title imageName:(NSString *)imageName;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2MemberReplyCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MemberReplyCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/14/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2MemberReplyCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2MemberReplyModel *model;
14 |
15 | @property (nonatomic, assign, getter = isTop) BOOL top;
16 |
17 | + (CGFloat)getCellHeightWithMemberReplyModel:(V2MemberReplyModel *)model;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2MenuSectionCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MenuSectionCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/30/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2MenuSectionCell : UITableViewCell
12 |
13 | @property (nonatomic, copy) NSString *imageName;
14 | @property (nonatomic, copy) NSString *title;
15 |
16 | @property (nonatomic, copy) NSString *badge;
17 |
18 | + (CGFloat)getCellHeight;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2MenuSectionView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MenuSectionView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/30/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2MenuSectionView : UIView
12 |
13 | @property (nonatomic, assign) NSInteger selectedIndex;
14 | @property (nonatomic, copy) void (^didSelectedIndexBlock)(NSInteger index);
15 |
16 | - (void)setDidSelectedIndexBlock:(void (^)(NSInteger index))didSelectedIndexBlock;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2MenuView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2MenuView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2MenuView : UIView
12 |
13 | @property (nonatomic, copy) void (^didSelectedIndexBlock)(NSInteger index);
14 |
15 | - (void)setDidSelectedIndexBlock:(void (^)(NSInteger index))didSelectedIndexBlock;
16 | - (void)selectIndex:(NSUInteger)index;
17 |
18 |
19 | @property (nonatomic, strong) UIImage *blurredImage;
20 |
21 | - (void)setOffsetProgress:(CGFloat)progress;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2NodeMenuView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodeMenuView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/28/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2NodeMenuView : UIView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2NodeMenuView.m:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodeMenuView.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/28/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2NodeMenuView.h"
10 |
11 | @implementation V2NodeMenuView
12 |
13 | - (id)initWithFrame:(CGRect)frame
14 | {
15 | self = [super initWithFrame:frame];
16 | if (self) {
17 | // Initialization code
18 | }
19 | return self;
20 | }
21 |
22 | /*
23 | // Only override drawRect: if you perform custom drawing.
24 | // An empty implementation adversely affects performance during animation.
25 | - (void)drawRect:(CGRect)rect
26 | {
27 | // Drawing code
28 | }
29 | */
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2NodesViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NodesViewCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/8/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2NodesViewCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) NSArray *nodesArray;
14 | @property (nonatomic, assign) UINavigationController *navi;
15 |
16 | + (CGFloat)getCellHeightWithNodesArray:(NSArray *)nodes;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2NotificationCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2NotificationCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/13/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2NotificationCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2NotificationModel *model;
14 | @property (nonatomic, assign) UINavigationController *navi;
15 |
16 | @property (nonatomic, assign, getter = isTop) BOOL top;
17 |
18 | + (CGFloat)getCellHeightWithNotificationModel:(V2NotificationModel *)model;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2ProfileBioCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2ProfileBioCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/4/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2ProfileBioCell : UITableViewCell
12 |
13 | @property (nonatomic, copy) NSString *bioString;
14 |
15 | + (CGFloat)getCellHeightWithBioString:(NSString *)bioString;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2ProfileCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2ProfileCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 5/4/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef NS_ENUM(NSInteger, V2ProfileCellType) {
12 | V2ProfileCellTypeTopic,
13 | V2ProfileCellTypeReply,
14 | V2ProfileCellTypeTwitter,
15 | V2ProfileCellTypeLocation,
16 | V2ProfileCellTypeWebsite
17 | };
18 |
19 | static NSString *const kProfileType = @"profileType";
20 | static NSString *const kProfileValue = @"profileValue";
21 |
22 | @interface V2ProfileCell : UITableViewCell
23 |
24 | @property (nonatomic, assign) V2ProfileCellType type;
25 | @property (nonatomic, copy) NSString *title;
26 |
27 | //@property (nonatomic, copy) NSDictionary *model;
28 |
29 | @property (nonatomic, assign) BOOL isTop;
30 | @property (nonatomic, assign) BOOL isBottom;
31 |
32 | + (CGFloat)getCellHeight;
33 |
34 | @end
35 |
36 |
37 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2SettingCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SettingCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 6/27/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2SettingCell : UITableViewCell
12 |
13 | @property (nonatomic, copy) NSString *title;
14 |
15 | @property (nonatomic, assign, getter = isTop) BOOL top;
16 | @property (nonatomic, assign, getter = isBottom) BOOL bottom;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2SettingCheckInCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SettingCheckInCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 7/5/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2SettingCell.h"
10 |
11 | @interface V2SettingCheckInCell : V2SettingCell
12 |
13 | - (void)beginCheckIn;
14 |
15 | - (void)endCheckIn;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2SettingSwitchCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SettingSwitchCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 6/23/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2SettingCell.h"
10 |
11 | @interface V2SettingSwitchCell : V2SettingCell
12 |
13 | @property (nonatomic, strong) UISwitch *pushSwitch;
14 | @property (nonatomic, assign) BOOL isOn;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2SettingWeiboCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SettingWeiboCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 7/11/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import "V2SettingCell.h"
10 |
11 | @interface V2SettingWeiboCell : V2SettingCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2SubMenuSectionCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SubMenuSectionCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/10/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2SubMenuSectionCell : UITableViewCell
12 |
13 | @property (nonatomic, copy) NSString *title;
14 |
15 | + (CGFloat)getCellHeight;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2SubMenuSectionView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2SubMenuSectionView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 4/10/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2SubMenuSectionView : UIView
12 |
13 | @property (nonatomic, strong) NSArray *sectionTitleArray;
14 | @property (nonatomic, assign, getter = isFavorite) BOOL favorite;
15 |
16 | //@property (nonatomic, assign) NSInteger selectedIndex;
17 | @property (nonatomic, copy) void (^didSelectedIndexBlock)(NSInteger index);
18 |
19 | - (void)setDidSelectedIndexBlock:(void (^)(NSInteger index))didSelectedIndexBlock;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicBodyCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicBodyCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/19/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicBodyCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2TopicModel *model;
14 | @property (nonatomic, assign) UINavigationController *navi;
15 |
16 | @property (nonatomic, copy) void (^reloadCellBlock)();
17 |
18 | + (CGFloat)getCellHeightWithTopicModel:(V2TopicModel *)model;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicInfoCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicInfoCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/19/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicInfoCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2TopicModel *model;
14 | @property (nonatomic, assign) UINavigationController *navi;
15 |
16 | + (CGFloat)getCellHeightWithTopicModel:(V2TopicModel *)model;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicListCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicListCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/18/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicListCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2TopicModel *model;
14 |
15 | @property (nonatomic, assign) BOOL isTop;
16 |
17 | - (void)updateStatus;
18 |
19 | + (CGFloat)getCellHeightWithTopicModel:(V2TopicModel *)model;
20 | + (CGFloat)heightWithTopicModel:(V2TopicModel *)model;
21 |
22 | @end
23 |
24 | static NSString * const kShowTimeLabelNotification = @"ShowTimeLabelNotification";
25 | static NSString * const kHideTimeLabelNotification = @"HideTimeLabelNotification";
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicReplyCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicReplyCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/20/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicReplyCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2ReplyModel *model;
14 | @property (nonatomic, strong) V2ReplyModel *selectedReplyModel;
15 |
16 | @property (nonatomic, assign) UINavigationController *navi;
17 | @property (nonatomic, assign) V2ReplyList *replyList;
18 |
19 | @property (nonatomic, copy) void (^longPressedBlock)();
20 | @property (nonatomic, copy) void (^reloadCellBlock)();
21 |
22 | + (CGFloat)getCellHeightWithReplyModel:(V2ReplyModel *)model;
23 |
24 | @end
25 |
26 | static NSString * const kSelectMemberNotification = @"SelectMemberNotification";
27 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicTitleCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicTitleCell.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/19/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicTitleCell : UITableViewCell
12 |
13 | @property (nonatomic, strong) V2TopicModel *model;
14 | @property (nonatomic, assign) UINavigationController *navi;
15 |
16 | + (CGFloat)getCellHeightWithTopicModel:(V2TopicModel *)model;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicToolBarItemView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicToolBarItemView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/23/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface V2TopicToolBarItemView : UIView
12 |
13 | @property (nonatomic, copy ) NSString *itemTitle;
14 | @property (nonatomic, strong) UIImage *itemImage;
15 | @property (nonatomic, copy ) void (^buttonPressedBlock)();
16 |
17 | @property (nonatomic, copy) UIColor *backgroundColorNormal;
18 | @property (nonatomic, copy) UIColor *backgroundColorHighlighted;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/v2ex-iOS/Views/V2TopicToolBarView.h:
--------------------------------------------------------------------------------
1 | //
2 | // V2TopicToolBarView.h
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/23/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "SCMetionTextView.h"
12 |
13 | @interface V2TopicToolBarView : UIView
14 |
15 | @property (nonatomic, assign) CGFloat offset;
16 | @property (nonatomic, assign) CGPoint locationStart;
17 | @property (nonatomic, assign) CGPoint locationChanged;
18 |
19 | @property (nonatomic, assign, getter = isCreate) BOOL create;
20 | @property (nonatomic, readonly) BOOL isShowing;
21 |
22 | @property (nonatomic, strong) UIImage *blurredBackgroundImage;
23 |
24 | @property (nonatomic, copy, readonly) NSString *replyContentString;
25 | @property (nonatomic, assign, readonly, getter = isContentEmpty) BOOL contentEmpty;
26 | @property (nonatomic, copy) void (^contentIsEmptyBlock)(BOOL isEmpty);
27 |
28 | @property (nonatomic, copy) void (^insertImageBlock)();
29 |
30 | - (void)setLocationEnd:(CGPoint)locationEnd velocity:(CGPoint)velocity;
31 |
32 | - (void)showReplyViewWithQuotes:(NSArray *)quotes animated:(BOOL)animated;
33 |
34 | - (void)addImageWithURL:(NSURL *)url;
35 |
36 | - (void)clearTextView;
37 |
38 | - (void)popToolBar;
39 |
40 | @end
41 |
42 | static NSString *const kShowReplyTextViewNotification = @"kShowReplyTextViewNotification";
43 | static NSString *const kHideReplyTextViewNotification = @"kHideReplyTextViewNotification";
44 | static NSString *const kReplySuccessNotification = @"kReplySuccessNotification";
45 | static NSString *const kTakeScreenShootNotification = @"kTakeScreenShootNotification";
--------------------------------------------------------------------------------
/v2ex-iOS/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 | CFBundleDisplayName="V2EX";
4 |
--------------------------------------------------------------------------------
/v2ex-iOS/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // v2ex-iOS
4 | //
5 | // Created by Singro on 3/17/14.
6 | // Copyright (c) 2014 Singro. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "V2AppDelegate.h"
12 |
13 | int main(int argc, char * argv[])
14 | {
15 | @autoreleasepool {
16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([V2AppDelegate class]));
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/v2ex-iOS/zh-Hans.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 | CFBundleDisplayName="V2EX";
4 |
--------------------------------------------------------------------------------