├── .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 | [![Build Status](https://travis-ci.org/singro/v2ex.svg?branch=master)](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 | ![ScreenShoot 1](http://i.v2ex.co/EwnuC7uf.png) 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 | ![donate](http://i.v2ex.co/2O0eZEc9b.png) 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 | --------------------------------------------------------------------------------