├── .DS_Store ├── XTPopView ├── 付款.png ├── 发起群聊.png ├── 扫一扫.png ├── 添加朋友.png ├── .DS_Store ├── ViewController.h ├── AppDelegate.h ├── XTPopView │ ├── XTPopView.h │ ├── XTPopNormalView.h │ ├── XTPopTableView.h │ ├── XTPopViewBase.h │ ├── XTPopTableView.m │ ├── XTPopNormalView.m │ └── XTPopViewBase.m ├── main.m ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ ├── Main.storyboard │ └── LaunchScreen.storyboard ├── Info.plist ├── AppDelegate.m └── ViewController.m ├── XTPopView.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── project.pbxproj ├── XTPopViewSwift.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── project.pbxproj ├── XTPopView.podspec ├── XTPopViewTests ├── Info.plist └── XTPopViewTests.m ├── XTPopViewUITests ├── Info.plist └── XTPopViewUITests.m ├── LICENSE ├── XTPopViewSwift ├── ViewController.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Info.plist ├── Base.lproj │ ├── Main.storyboard │ └── LaunchScreen.storyboard ├── AppDelegate.swift └── XTPopViewSwift.swift ├── .gitignore └── README.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/.DS_Store -------------------------------------------------------------------------------- /XTPopView/付款.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/付款.png -------------------------------------------------------------------------------- /XTPopView/发起群聊.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/发起群聊.png -------------------------------------------------------------------------------- /XTPopView/扫一扫.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/扫一扫.png -------------------------------------------------------------------------------- /XTPopView/添加朋友.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/添加朋友.png -------------------------------------------------------------------------------- /XTPopView/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/.DS_Store -------------------------------------------------------------------------------- /XTPopView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /XTPopViewSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /XTPopView/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /XTPopView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /XTPopViewSwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /XTPopView/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopView.h: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopView.h 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/7/7. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #ifndef XTPopView_h 10 | #define XTPopView_h 11 | 12 | #import "XTPopViewBase.h" 13 | #import "XTPopTableView.h" 14 | #import "XTPopNormalView.h" 15 | 16 | #endif /* XTPopView_h */ 17 | -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopNormalView.h: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopNormalView.h 3 | // XTPopView 4 | // 5 | // Created by Mac on 16/7/27. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "XTPopViewBase.h" 10 | 11 | @interface XTPopNormalView : XTPopViewBase 12 | @property (nonatomic, strong) UIButton *btnDiss; 13 | - (void)popViewNormal; 14 | 15 | 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /XTPopView/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /XTPopView.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'XTPopView' 3 | s.version = '1.0.1' 4 | s.license = 'MIT' 5 | s.summary = 'An view like XTPopView on iOS.' 6 | s.homepage = 'https://github.com/summerxx27/XTPopView' 7 | s.authors = { 'summerxx27' => '1005430006@qq.com' } 8 | s.source = { :git => 'https://github.com/summerxx27/XTPopView.git', :tag => s.version.to_s } 9 | s.requires_arc = true 10 | s.ios.deployment_target = '7.0' 11 | s.source_files = 'XTPopView/XTPopView/*.{h,m}' 12 | end 13 | 14 | -------------------------------------------------------------------------------- /XTPopViewTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /XTPopViewUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopTableView.h: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopTableView.h 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/7/7. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "XTPopViewBase.h" 10 | @protocol SelectIndexPathDelegate 11 | 12 | - (void)selectIndexPathRow:(NSInteger )index; 13 | 14 | @end 15 | 16 | @interface XTPopTableView : XTPopViewBase 17 | // titles 18 | @property (nonatomic, strong) NSArray * _Nonnull dataArray; 19 | // images 20 | @property (nonatomic, strong) NSArray * _Nonnull images; 21 | // height 22 | @property (nonatomic, assign) CGFloat row_height; 23 | // font 24 | @property (nonatomic, assign) CGFloat fontSize; 25 | // textColor 26 | @property (nonatomic, strong) UIColor * _Nonnull titleTextColor; 27 | @property (nonatomic, assign) NSTextAlignment textAlignment; 28 | // delegate 29 | @property (nonatomic, assign) id _Nonnull delegate; 30 | @end 31 | -------------------------------------------------------------------------------- /XTPopViewTests/XTPopViewTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopViewTests.m 3 | // XTPopViewTests 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface XTPopViewTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation XTPopViewTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Zhang Jingwang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /XTPopViewSwift/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // XTPopViewSwift 4 | // 5 | // Created by summerxx on 2016/11/15. 6 | // Copyright © 2016年 summerxx. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | var btn = UIButton() 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | 17 | 18 | btn = UIButton.init(type: UIButtonType.custom) 19 | btn.frame = CGRect.init(x: 0, y: 0, width: 88, height: 88) 20 | btn.center = self.view.center 21 | self.view.addSubview(btn) 22 | btn.backgroundColor = UIColor.cyan 23 | btn.addTarget(self, action: #selector(ViewController.btnClick), for: UIControlEvents.touchUpInside) 24 | } 25 | func btnClick(){ 26 | let popView = XTPopViewSwift.init(origin: CGPoint.init(x: self.btn.center.x, y: self.btn.center.y), width: 100, height: 200) 27 | popView.bgView.backgroundColor = UIColor.black 28 | popView.popView() 29 | 30 | } 31 | 32 | override func didReceiveMemoryWarning() { 33 | super.didReceiveMemoryWarning() 34 | // Dispose of any resources that can be recreated. 35 | } 36 | 37 | 38 | } 39 | 40 | -------------------------------------------------------------------------------- /XTPopViewUITests/XTPopViewUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopViewUITests.m 3 | // XTPopViewUITests 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface XTPopViewUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation XTPopViewUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | # Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | # Carthage/Checkouts 42 | 43 | Carthage/Build 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/screenshots 54 | -------------------------------------------------------------------------------- /XTPopViewSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /XTPopView/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "83.5x83.5", 66 | "scale" : "2x" 67 | } 68 | ], 69 | "info" : { 70 | "version" : 1, 71 | "author" : "xcode" 72 | } 73 | } -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopViewBase.h: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopView.h 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import 10 | #define ScreenWidth [UIScreen mainScreen].bounds.size.width 11 | #define ScreenHeight [UIScreen mainScreen].bounds.size.height 12 | #define Length 5 13 | #define Length2 15 14 | typedef NS_ENUM(NSInteger, XTDirectionType) 15 | { 16 | XTTypeOfUpLeft, // 上左 17 | XTTypeOfUpCenter, // 上中 18 | XTTypeOfUpRight, // 上右 19 | 20 | XTTypeOfDownLeft, // 下左 21 | XTTypeOfDownCenter, // 下中 22 | XTTypeOfDownRight, // 下右 23 | 24 | XTTypeOfLeftUp, // 左上 25 | XTTypeOfLeftCenter, // 左中 26 | XTTypeOfLeftDown, // 左下 27 | 28 | XTTypeOfRightUp, // 右上 29 | XTTypeOfRightCenter,// 右中 30 | XTTypeOfRightDown, // 右下 31 | 32 | }; 33 | 34 | 35 | @interface XTPopViewBase : UIView 36 | 37 | // backGoundView 38 | @property (nonatomic, strong) UIView * _Nonnull backGoundView; 39 | 40 | @property (nonatomic, assign) CGPoint origin; 41 | 42 | @property (nonatomic, assign) CGFloat height; 43 | 44 | @property (nonatomic, assign) CGFloat width; 45 | 46 | @property (nonatomic, assign) XTDirectionType type; 47 | 48 | // 初始化方法 49 | - (instancetype _Nonnull)initWithOrigin:(CGPoint) origin 50 | Width:(CGFloat) width 51 | Height:(CGFloat) height 52 | Type:(XTDirectionType)type 53 | Color:( UIColor * _Nonnull ) color; 54 | 55 | - (void)popView; 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /XTPopViewSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /XTPopView/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /XTPopView/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /XTPopView/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /XTPopViewSwift/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /XTPopViewSwift/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /XTPopViewSwift/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // XTPopViewSwift 4 | // 5 | // Created by summerxx on 2016/11/15. 6 | // Copyright © 2016年 summerxx. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /XTPopView/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | 21 | ViewController *root = [[ViewController alloc] init]; 22 | UINavigationController *navRoot = [[UINavigationController alloc] initWithRootViewController:root]; 23 | self.window.rootViewController = navRoot; 24 | return YES; 25 | } 26 | 27 | - (void)applicationWillResignActive:(UIApplication *)application { 28 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 29 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 30 | } 31 | 32 | - (void)applicationDidEnterBackground:(UIApplication *)application { 33 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 34 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 35 | } 36 | 37 | - (void)applicationWillEnterForeground:(UIApplication *)application { 38 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 39 | } 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 43 | } 44 | 45 | - (void)applicationWillTerminate:(UIApplication *)application { 46 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /XTPopView/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "XTPopView.h" 11 | @interface ViewController () 12 | @property(strong,readwrite,nonatomic)UIButton *button; 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view, typically from a nib. 20 | self.view.backgroundColor = [UIColor whiteColor]; 21 | UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 22 | btn.frame = CGRectMake(0, 0, 40, 40); 23 | self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn]; 24 | [btn setTitle:@"➕" forState:UIControlStateNormal]; 25 | [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside]; 26 | 27 | _button = [UIButton buttonWithType:UIButtonTypeCustom]; 28 | _button.frame = CGRectMake(0, 0, 100, 50); 29 | _button.center = self.view.center; 30 | [self.view addSubview:_button]; 31 | _button.backgroundColor = [UIColor colorWithRed:0.3434 green:0.7864 blue:1.0 alpha:1.0]; 32 | [_button addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; 33 | 34 | } 35 | - (void)click:(UIButton *)btn 36 | { 37 | CGPoint point = CGPointMake(self.view.frame.size.width - 40, btn.frame.origin.y + btn.frame.size.width + 35); 38 | XTPopTableView *popView = [[XTPopTableView alloc] initWithOrigin:point Width:150 Height:30 * 3 Type:XTTypeOfUpRight Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 39 | popView.dataArray = @[@"添加朋友", @"扫一扫", @"付款"]; 40 | popView.images = @[@"添加朋友", @"扫一扫", @"付款"]; 41 | popView.row_height = 30; 42 | popView.delegate = self; 43 | popView.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 44 | [popView popView]; 45 | } 46 | - (void)btnClick 47 | { 48 | CGPoint point = self.view.center; 49 | XTPopNormalView * view = [[XTPopNormalView alloc] initWithOrigin:point Width:150 Height:150 Type:XTTypeOfDownCenter Color:[UIColor cyanColor]]; 50 | [view.btnDiss setTitle:@"点我 DISSMISS" forState:UIControlStateNormal]; 51 | [view popView]; 52 | 53 | } 54 | - (void)selectIndexPathRow:(NSInteger )index 55 | { 56 | NSLog(@"Index ======== %ld", index); 57 | } 58 | 59 | - (void)didReceiveMemoryWarning { 60 | [super didReceiveMemoryWarning]; 61 | // Dispose of any resources that can be recreated. 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopTableView.m: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopTableView.m 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/7/7. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "XTPopTableView.h" 10 | 11 | @interface XTPopTableView () 12 | 13 | @property (nonatomic, strong) UITableView *tableView; 14 | 15 | @end 16 | 17 | @implementation XTPopTableView 18 | - (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color 19 | { 20 | if ([super initWithOrigin:origin Width:width Height:height Type:type Color:color]) { 21 | // 添加tableview 22 | [self.backGoundView addSubview:self.tableView]; 23 | } 24 | return self; 25 | } 26 | 27 | #pragma mark - 28 | - (UITableView *)tableView 29 | { 30 | if (!_tableView) { 31 | _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.backGoundView.frame.size.width, self.backGoundView.frame.size.height) style:UITableViewStylePlain]; 32 | _tableView.dataSource = self; 33 | _tableView.backgroundColor = [UIColor clearColor]; 34 | _tableView.delegate = self; 35 | } 36 | return _tableView; 37 | } 38 | #pragma mark - 39 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 40 | { 41 | return self.dataArray.count; 42 | } 43 | #pragma mark - 44 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 45 | { 46 | if (self.row_height == 0) { 47 | return 44; 48 | }else{ 49 | return self.row_height; 50 | } 51 | } 52 | #pragma mark - 53 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 54 | { 55 | 56 | static NSString *cellIdentifier = @"cellIdentifier2"; 57 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 58 | if (!cell) { 59 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 60 | } 61 | cell.backgroundColor = [UIColor clearColor]; 62 | cell.imageView.image = [UIImage imageNamed:self.images[indexPath.row]]; 63 | cell.textLabel.text = self.dataArray[indexPath.row]; 64 | cell.textLabel.font = [UIFont systemFontOfSize:self.fontSize]; 65 | cell.textLabel.textAlignment = NSTextAlignmentCenter; 66 | cell.textLabel.numberOfLines = 0; 67 | cell.selectionStyle = UITableViewCellSelectionStyleNone; 68 | cell.textLabel.textColor = self.titleTextColor; 69 | 70 | if (self.dataArray.count == 1) { 71 | self.tableView.bounces = NO; 72 | self.tableView.separatorColor = [UIColor clearColor]; 73 | } 74 | 75 | return cell; 76 | } 77 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 78 | { 79 | if (self.delegate && [self.delegate respondsToSelector:@selector(selectIndexPathRow:)]) { 80 | [self.delegate selectIndexPathRow:indexPath.row]; 81 | [self removeFromSuperview]; 82 | } 83 | } 84 | 85 | @end 86 | -------------------------------------------------------------------------------- /XTPopViewSwift/XTPopViewSwift.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopViewSwift.swift 3 | // XTPopViewSwift 4 | // 5 | // Created by summerxx on 2016/11/15. 6 | // Copyright © 2016年 summerxx. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | enum ArrowOfDirection { 11 | case XTUpCenter 12 | } 13 | class XTPopViewSwift: UIView { 14 | 15 | 16 | var bgView = UIView() 17 | var origin = CGPoint() 18 | var height = 0.0 19 | var width = 0.0 20 | var arrow = ArrowOfDirection.XTUpCenter 21 | // 初始化方法 22 | required init(origin: CGPoint, width: Double, height: Double) { 23 | super.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.height)) 24 | self.backgroundColor = UIColor.clear 25 | self.origin = origin 26 | self.width = Double(width) 27 | self.height = Double(height) 28 | let x = Double(origin.x) 29 | let y = Double(origin.y) 30 | bgView = UIView.init(frame: CGRect.init(x: x, y: y, width: width, height: height)) 31 | self.addSubview(self.bgView) 32 | } 33 | required init?(coder aDecoder: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | 37 | override func draw(_ rect: CGRect) { 38 | let context = UIGraphicsGetCurrentContext() 39 | 40 | let startX = self.origin.x 41 | let startY = self.origin.y 42 | 43 | context?.move(to: CGPoint.init(x: startX, y: startY)) 44 | // 画出两条线 45 | context?.addLine(to: CGPoint.init(x: startX + 5.0, y: startY + 5.0)) 46 | context?.addLine(to: CGPoint.init(x: startX - 5.0, y: startY + 5.0)) 47 | 48 | context?.closePath() 49 | // 填充颜色 50 | self.bgView.backgroundColor?.setFill() 51 | self.backgroundColor?.setStroke() 52 | context?.drawPath(using: CGPathDrawingMode.fillStroke) 53 | } 54 | 55 | func popView()->Void{ 56 | // 创建keyWindow 57 | let window = UIApplication.shared.keyWindow 58 | window?.addSubview(self) 59 | self.bgView.frame = CGRect.init(x: self.origin.x, y: self.origin.y + 5.0, width: 0, height: 0) 60 | // 类型CGFloat -> Double 61 | let originX = Double(self.origin.x) - self.width / 2 62 | let originY = Double(self.origin.y) + 5.0 63 | let width = self.width 64 | let height = self.height 65 | // 这里为什么抽出一个方法呢, 如果有很多类型箭头就方便很多, 可以看看OC版本 66 | self.updateFrame(x: originX, y: originY, width: width, height: height) 67 | 68 | } 69 | 70 | func updateFrame(x: Double, y: Double, width: Double, height: Double){ 71 | self.bgView.frame = CGRect.init(x: x, y: y, width: width, height: height) 72 | } 73 | 74 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 75 | // 这里遍历包含UITouch的集合, 从中找到黑色View 76 | for touch: AnyObject in touches { 77 | let t:UITouch = touch as! UITouch 78 | if(!(t.view?.isEqual(self.bgView))!){ 79 | self.dismiss() 80 | } 81 | } 82 | } 83 | 84 | func dismiss()->Void{ 85 | let delay = DispatchTime.now() + DispatchTimeInterval.seconds(1) 86 | DispatchQueue.main.asyncAfter(deadline: delay) { 87 | // 延迟执行 88 | let res = self.subviews 89 | for view in res { 90 | view.removeFromSuperview() 91 | } 92 | self.removeFromSuperview() 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](http://ww4.sinaimg.cn/large/e6a4355cgw1f5lbvn61r1g208w0fqtf8.gif) 2 | ![](http://ww1.sinaimg.cn/large/e6a4355cgw1f5leiopp3fj206w0cbaa4.jpg) 3 | # XTPopView(支持十二种样式) 4 | ##### 第一种 5 | ```objectivec 6 | - (void)btnClick:(UIButton *)btn 7 | { 8 | 9 | /** 10 | XTTypeOfUpLeft, // 上左 11 | XTTypeOfUpCenter, // 上中 12 | XTTypeOfUpRight, // 上右 13 | 14 | XTTypeOfDownLeft, // 下左 15 | XTTypeOfDownCenter, // 下中 16 | XTTypeOfDownRight, // 下右 17 | 18 | XTTypeOfLeftUp, // 左上 19 | XTTypeOfLeftCenter, // 左中 20 | XTTypeOfLeftDown, // 左下 21 | 22 | XTTypeOfRightUp, // 右上 23 | XTTypeOfRightCenter,// 右中 24 | XTTypeOfRightDown, // 右下 25 | */ 26 | switch (btn.tag) { 27 | case 0: 28 | { 29 | // 如果你的控件是属性, 这里可以进行相对布局 30 | CGPoint point = CGPointMake(90 * 1,144); 31 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:300 Height:60 Type:XTTypeOfUpLeft Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 32 | view1.delegate = self; 33 | view1.dataArray = @[@"您有一位朋友找您", @"好的 加我的qq群: 498143780"]; 34 | view1.row_height = 30; 35 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 36 | [view1 popView]; 37 | } 38 | break; 39 | case 1: 40 | { 41 | // 如果你的控件是属性, 这里可以进行相对布局 42 | CGPoint point = CGPointMake(90,144 + 86 * 1); 43 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfUpCenter Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 44 | view1.dataArray = @[@"您有一位朋友找您"]; 45 | view1.row_height = 30; 46 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 47 | [view1 popView]; 48 | } 49 | break; 50 | case 2: 51 | { 52 | // 如果你的控件是属性, 这里可以进行相对布局 53 | CGPoint point = CGPointMake(90,144 + 86 * 2); 54 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfDownLeft Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 55 | view1.dataArray = @[@"您有一位朋友找您"]; 56 | view1.row_height = 30; 57 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 58 | [view1 popView]; 59 | } 60 | break; 61 | case 3: 62 | { 63 | // 如果你的控件是属性, 这里可以进行相对布局 64 | CGPoint point = CGPointMake(90,144 + 86 * 3); 65 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfDownCenter Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 66 | view1.dataArray = @[@"您有一位朋友找您"]; 67 | view1.row_height = 30; 68 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 69 | [view1 popView]; 70 | } 71 | break; 72 | case 4: 73 | { 74 | // 如果你的控件是属性, 这里可以进行相对布局 75 | CGPoint point = CGPointMake(90,144 + 86 * 4); 76 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfLeftUp Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 77 | view1.dataArray = @[@"您有一位朋友找您"]; 78 | view1.row_height = 30; 79 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 80 | [view1 popView]; 81 | } 82 | break; 83 | case 5: 84 | { 85 | // 如果你的控件是属性, 这里可以进行相对布局 86 | CGPoint point = CGPointMake(90,144 + 86 * 5); 87 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfDownCenter Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 88 | view1.dataArray = @[@"您有一位朋友找您"]; 89 | view1.row_height = 30; 90 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0]; 91 | [view1 popView]; 92 | } 93 | break; 94 | 95 | default: 96 | break; 97 | } 98 | } 99 | ``` 100 | 如果要实现点击方法 101 | 签订协议 102 | ```objectivec 103 | @interface ViewController () 104 | 105 | ``` 106 | 实现代理方法 107 | ```objectivec 108 | - (void)selectIndexPathRow:(NSInteger)index 109 | ``` 110 | 111 | ##### 第二种 112 | ```objectivec 113 | // 如果你的控件是属性, 这里可以进行相对布局 114 | CGPoint point = CGPointMake(90 * 1,144); 115 | XTPopNormalView *view1 = [[XTPopNormalView alloc] initWithOrigin:point Width:300 Height:60 Type:XTTypeOfUpLeft Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]]; 116 | [view1 popViewNormal]; 117 | [view1.btnDiss setTitle:@"点击我 消失" forState:UIControlStateNormal]; 118 | [self.view addSubview:view1]; 119 | ``` -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopNormalView.m: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopNormalView.m 3 | // XTPopView 4 | // 5 | // Created by Mac on 16/7/27. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "XTPopNormalView.h" 10 | 11 | @interface XTPopNormalView () 12 | 13 | @end 14 | 15 | @implementation XTPopNormalView 16 | - (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color 17 | { 18 | self = [super initWithOrigin:origin Width:width Height:30 Type:type Color:color]; 19 | self.type = type; 20 | [self setUI:width]; 21 | return self; 22 | } 23 | - (UIButton *)btnDiss 24 | { 25 | if (!_btnDiss) { 26 | _btnDiss = [UIButton buttonWithType:UIButtonTypeCustom]; 27 | } 28 | return _btnDiss; 29 | } 30 | - (void)setUI:(CGFloat)width 31 | { 32 | [self.backGoundView addSubview:self.btnDiss]; 33 | _btnDiss.frame = CGRectMake(0, 0, width, 30); 34 | [_btnDiss addTarget:self action:@selector(dissClick) forControlEvents:UIControlEventTouchUpInside]; 35 | } 36 | - (void)dissClick 37 | { 38 | [UIView animateWithDuration:0.25 animations:^{ 39 | // 40 | [self removeFromSuperview]; 41 | }]; 42 | } 43 | #pragma mark - 44 | - (void)drawRect:(CGRect)rect 45 | { 46 | [super drawRect:rect]; 47 | } 48 | #pragma mark - 49 | - (void)popViewNormal 50 | { 51 | switch (self.type) { 52 | case XTTypeOfUpLeft: { 53 | { 54 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0); 55 | CGFloat origin_x = self.origin.x - Length2; 56 | CGFloat origin_y = self.origin.y + Length; 57 | CGFloat size_width = self.width; 58 | CGFloat size_height = self.height; 59 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 60 | } 61 | break; 62 | } 63 | case XTTypeOfUpCenter: { 64 | { 65 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0); 66 | CGFloat origin_x = self.origin.x - self.width / 2; 67 | CGFloat origin_y = self.origin.y + Length; 68 | CGFloat size_width = self.width; 69 | CGFloat size_height = self.height; 70 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 71 | } 72 | break; 73 | } 74 | case XTTypeOfUpRight: { 75 | { 76 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0); 77 | CGFloat origin_x = self.origin.x + Length2; 78 | CGFloat origin_y = self.origin.y + Length; 79 | CGFloat size_width = -self.width; 80 | CGFloat size_height = self.height; 81 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 82 | } 83 | break; 84 | } 85 | case XTTypeOfDownLeft: { 86 | { 87 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0); 88 | CGFloat origin_x = self.origin.x - Length2; 89 | CGFloat origin_y = self.origin.y - Length; 90 | CGFloat size_width = self.width; 91 | CGFloat size_height = -self.height; 92 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 93 | } 94 | break; 95 | } 96 | case XTTypeOfDownCenter: { 97 | { 98 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0); 99 | CGFloat origin_x = self.origin.x - self.width / 2; 100 | CGFloat origin_y = self.origin.y - Length; 101 | CGFloat size_width = self.width; 102 | CGFloat size_height = -self.height; 103 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 104 | } 105 | break; 106 | } 107 | case XTTypeOfDownRight: { 108 | { 109 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0); 110 | CGFloat origin_x = self.origin.x-self.width + Length2; 111 | CGFloat origin_y = self.origin.y - Length; 112 | CGFloat size_width = self.width; 113 | CGFloat size_height = -self.height; 114 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 115 | } 116 | break; 117 | } 118 | 119 | case XTTypeOfLeftUp: { 120 | { 121 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0); 122 | CGFloat origin_x = self.origin.x + Length; 123 | CGFloat origin_y = self.origin.y - Length2; 124 | CGFloat size_width = self.width; 125 | CGFloat size_height = self.height; 126 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 127 | } 128 | break; 129 | } 130 | case XTTypeOfLeftCenter: { 131 | { 132 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0); 133 | CGFloat origin_x = self.origin.x + Length; 134 | CGFloat origin_y = self.origin.y - self.height / 2; 135 | CGFloat size_width = self.width; 136 | CGFloat size_height = self.height; 137 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 138 | } 139 | break; 140 | } 141 | case XTTypeOfLeftDown: { 142 | { 143 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0); 144 | CGFloat origin_x = self.origin.x + Length; 145 | CGFloat origin_y = self.origin.y - self.height + Length2; 146 | CGFloat size_width = self.width; 147 | CGFloat size_height = self.height; 148 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 149 | } 150 | break; 151 | } 152 | case XTTypeOfRightUp: { 153 | { 154 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0); 155 | CGFloat origin_x = self.origin.x - Length; 156 | CGFloat origin_y = self.origin.y - Length2; 157 | CGFloat size_width = -self.width; 158 | CGFloat size_height = self.height; 159 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 160 | } 161 | break; 162 | } 163 | case XTTypeOfRightCenter: { 164 | { 165 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0); 166 | CGFloat origin_x = self.origin.x - Length; 167 | CGFloat origin_y = self.origin.y - self.height / 2; 168 | CGFloat size_width = -self.width; 169 | CGFloat size_height = self.height; 170 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 171 | } 172 | break; 173 | } 174 | case XTTypeOfRightDown: { 175 | { 176 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0); 177 | CGFloat origin_x = self.origin.x - Length; 178 | CGFloat origin_y = self.origin.y - self.height + Length2; 179 | CGFloat size_width = -self.width; 180 | CGFloat size_height = self.height; 181 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 182 | } 183 | break; 184 | } 185 | } 186 | } 187 | - (void)startAnimateNormalView_x:(CGFloat) x 188 | _y:(CGFloat) y 189 | origin_width:(CGFloat) width 190 | origin_height:(CGFloat) height 191 | { 192 | self.backGoundView.frame = CGRectMake(x, y, width, height); 193 | } 194 | #pragma mark - 195 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 196 | { 197 | NSLog(@"------------"); 198 | 199 | } 200 | #pragma mark - 201 | 202 | 203 | @end 204 | -------------------------------------------------------------------------------- /XTPopView/XTPopView/XTPopViewBase.m: -------------------------------------------------------------------------------- 1 | // 2 | // XTPopView.m 3 | // XTPopView 4 | // 5 | // Created by zjwang on 16/5/23. 6 | // Copyright © 2016年 夏天. All rights reserved. 7 | // 8 | 9 | #import "XTPopViewBase.h" 10 | 11 | @interface XTPopViewBase () 12 | 13 | @end 14 | 15 | @implementation XTPopViewBase 16 | 17 | - (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color 18 | { 19 | 20 | self = [super initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)]; 21 | if (self) { 22 | self.backgroundColor = [UIColor clearColor]; 23 | // 箭头的位置 24 | self.origin = origin; 25 | // 视图的宽度 26 | self.width = width; 27 | // 视图的高度 28 | self.height = height; 29 | // 类型 30 | self.type = type; 31 | self.backGoundView = [[UIView alloc] initWithFrame:CGRectMake(origin.x, origin.y, width, height)]; 32 | self.backGoundView.backgroundColor = color; 33 | [self addSubview:self.backGoundView]; 34 | } 35 | return self; 36 | } 37 | #pragma mark - drawRect 38 | - (void)drawRect:(CGRect)rect { 39 | // Drawing code 40 | 41 | CGContextRef context = UIGraphicsGetCurrentContext(); 42 | 43 | switch (self.type) { 44 | case XTTypeOfUpLeft: 45 | case XTTypeOfUpCenter: 46 | case XTTypeOfUpRight:{ 47 | { 48 | CGFloat startX = self.origin.x; 49 | CGFloat startY = self.origin.y; 50 | CGContextMoveToPoint(context, startX, startY); 51 | CGContextAddLineToPoint(context, startX + Length, startY + Length); 52 | CGContextAddLineToPoint(context, startX - Length, startY + Length); 53 | } 54 | break; 55 | } 56 | case XTTypeOfDownLeft: 57 | case XTTypeOfDownCenter: 58 | case XTTypeOfDownRight: { 59 | { 60 | CGFloat startX = self.origin.x; 61 | CGFloat startY = self.origin.y; 62 | CGContextMoveToPoint(context, startX, startY); 63 | CGContextAddLineToPoint(context, startX - Length, startY - Length); 64 | CGContextAddLineToPoint(context, startX + Length, startY - Length); 65 | } 66 | break; 67 | } 68 | case XTTypeOfLeftUp: 69 | case XTTypeOfLeftCenter: 70 | case XTTypeOfLeftDown: { 71 | { 72 | CGFloat startX = self.origin.x; 73 | CGFloat startY = self.origin.y; 74 | CGContextMoveToPoint(context, startX, startY); 75 | CGContextAddLineToPoint(context, startX + Length, startY - Length); 76 | CGContextAddLineToPoint(context, startX + Length, startY + Length); 77 | } 78 | break; 79 | } 80 | case XTTypeOfRightUp: 81 | case XTTypeOfRightCenter: 82 | case XTTypeOfRightDown: { 83 | { 84 | CGFloat startX = self.origin.x; 85 | CGFloat startY = self.origin.y; 86 | CGContextMoveToPoint(context, startX, startY); 87 | CGContextAddLineToPoint(context, startX - Length, startY - Length); 88 | CGContextAddLineToPoint(context, startX - Length, startY + Length); 89 | } 90 | break; 91 | } 92 | } 93 | 94 | CGContextClosePath(context); 95 | [self.backGoundView.backgroundColor setFill]; 96 | [self.backgroundColor setStroke]; 97 | CGContextDrawPath(context, kCGPathFillStroke); 98 | } 99 | #pragma mark - popView 100 | - (void)popView 101 | { 102 | UIWindow *windowView = [UIApplication sharedApplication].keyWindow; 103 | [windowView addSubview:self]; 104 | 105 | switch (self.type) { 106 | case XTTypeOfUpLeft: { 107 | { 108 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0); 109 | CGFloat origin_x = self.origin.x - Length2; 110 | CGFloat origin_y = self.origin.y + Length; 111 | CGFloat size_width = self.width; 112 | CGFloat size_height = self.height; 113 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 114 | } 115 | break; 116 | } 117 | case XTTypeOfUpCenter: { 118 | { 119 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0); 120 | CGFloat origin_x = self.origin.x - self.width / 2; 121 | CGFloat origin_y = self.origin.y + Length; 122 | CGFloat size_width = self.width; 123 | CGFloat size_height = self.height; 124 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 125 | } 126 | break; 127 | } 128 | case XTTypeOfUpRight: { 129 | { 130 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0); 131 | CGFloat origin_x = self.origin.x + Length2; 132 | CGFloat origin_y = self.origin.y + Length; 133 | CGFloat size_width = -self.width; 134 | CGFloat size_height = self.height; 135 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 136 | } 137 | break; 138 | } 139 | case XTTypeOfDownLeft: { 140 | { 141 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0); 142 | CGFloat origin_x = self.origin.x - Length2; 143 | CGFloat origin_y = self.origin.y - Length; 144 | CGFloat size_width = self.width; 145 | CGFloat size_height = -self.height; 146 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 147 | } 148 | break; 149 | } 150 | case XTTypeOfDownCenter: { 151 | { 152 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0); 153 | CGFloat origin_x = self.origin.x - self.width / 2; 154 | CGFloat origin_y = self.origin.y - Length; 155 | CGFloat size_width = self.width; 156 | CGFloat size_height = -self.height; 157 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 158 | } 159 | break; 160 | } 161 | case XTTypeOfDownRight: { 162 | { 163 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0); 164 | CGFloat origin_x = self.origin.x-self.width + Length2; 165 | CGFloat origin_y = self.origin.y - Length; 166 | CGFloat size_width = self.width; 167 | CGFloat size_height = -self.height; 168 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 169 | } 170 | break; 171 | } 172 | 173 | case XTTypeOfLeftUp: { 174 | { 175 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0); 176 | CGFloat origin_x = self.origin.x + Length; 177 | CGFloat origin_y = self.origin.y - Length2; 178 | CGFloat size_width = self.width; 179 | CGFloat size_height = self.height; 180 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 181 | } 182 | break; 183 | } 184 | case XTTypeOfLeftCenter: { 185 | { 186 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0); 187 | CGFloat origin_x = self.origin.x + Length; 188 | CGFloat origin_y = self.origin.y - self.height / 2; 189 | CGFloat size_width = self.width; 190 | CGFloat size_height = self.height; 191 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 192 | } 193 | break; 194 | } 195 | case XTTypeOfLeftDown: { 196 | { 197 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0); 198 | CGFloat origin_x = self.origin.x + Length; 199 | CGFloat origin_y = self.origin.y - self.height + Length2; 200 | CGFloat size_width = self.width; 201 | CGFloat size_height = self.height; 202 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 203 | } 204 | break; 205 | } 206 | case XTTypeOfRightUp: { 207 | { 208 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0); 209 | CGFloat origin_x = self.origin.x - Length; 210 | CGFloat origin_y = self.origin.y - Length2; 211 | CGFloat size_width = -self.width; 212 | CGFloat size_height = self.height; 213 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 214 | } 215 | break; 216 | } 217 | case XTTypeOfRightCenter: { 218 | { 219 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0); 220 | CGFloat origin_x = self.origin.x - Length; 221 | CGFloat origin_y = self.origin.y - self.height / 2; 222 | CGFloat size_width = -self.width; 223 | CGFloat size_height = self.height; 224 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 225 | } 226 | break; 227 | } 228 | case XTTypeOfRightDown: { 229 | { 230 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0); 231 | CGFloat origin_x = self.origin.x - Length; 232 | CGFloat origin_y = self.origin.y - self.height + Length2; 233 | CGFloat size_width = -self.width; 234 | CGFloat size_height = self.height; 235 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height]; 236 | } 237 | break; 238 | } 239 | } 240 | } 241 | #pragma mark - 242 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 243 | { 244 | if (![[touches anyObject].view isEqual:self.backGoundView]) { 245 | [self dismiss]; 246 | } 247 | 248 | } 249 | #pragma mark - 250 | - (void)dismiss 251 | { 252 | NSArray *results = [self subviews]; 253 | for (UIView *view in results) { 254 | [view removeFromSuperview]; 255 | } 256 | [self removeFromSuperview]; 257 | } 258 | #pragma mark - 259 | - (void)startAnimateView_x:(CGFloat) x 260 | _y:(CGFloat) y 261 | origin_width:(CGFloat) width 262 | origin_height:(CGFloat) height 263 | { 264 | self.backGoundView.frame = CGRectMake(x, y, width, height); 265 | } 266 | @end 267 | -------------------------------------------------------------------------------- /XTPopViewSwift.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B96D17211DDA1A4F001B66F0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96D17201DDA1A4F001B66F0 /* AppDelegate.swift */; }; 11 | B96D17231DDA1A4F001B66F0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96D17221DDA1A4F001B66F0 /* ViewController.swift */; }; 12 | B96D17261DDA1A4F001B66F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B96D17241DDA1A4F001B66F0 /* Main.storyboard */; }; 13 | B96D17281DDA1A4F001B66F0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B96D17271DDA1A4F001B66F0 /* Assets.xcassets */; }; 14 | B96D172B1DDA1A4F001B66F0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B96D17291DDA1A4F001B66F0 /* LaunchScreen.storyboard */; }; 15 | B96D17331DDA1A62001B66F0 /* XTPopViewSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96D17321DDA1A62001B66F0 /* XTPopViewSwift.swift */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | B96D171D1DDA1A4F001B66F0 /* XTPopViewSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XTPopViewSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; 20 | B96D17201DDA1A4F001B66F0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 21 | B96D17221DDA1A4F001B66F0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 22 | B96D17251DDA1A4F001B66F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 23 | B96D17271DDA1A4F001B66F0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 24 | B96D172A1DDA1A4F001B66F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 25 | B96D172C1DDA1A4F001B66F0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 26 | B96D17321DDA1A62001B66F0 /* XTPopViewSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XTPopViewSwift.swift; sourceTree = ""; }; 27 | /* End PBXFileReference section */ 28 | 29 | /* Begin PBXFrameworksBuildPhase section */ 30 | B96D171A1DDA1A4F001B66F0 /* Frameworks */ = { 31 | isa = PBXFrameworksBuildPhase; 32 | buildActionMask = 2147483647; 33 | files = ( 34 | ); 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXFrameworksBuildPhase section */ 38 | 39 | /* Begin PBXGroup section */ 40 | B96D17141DDA1A4F001B66F0 = { 41 | isa = PBXGroup; 42 | children = ( 43 | B96D171F1DDA1A4F001B66F0 /* XTPopViewSwift */, 44 | B96D171E1DDA1A4F001B66F0 /* Products */, 45 | ); 46 | sourceTree = ""; 47 | }; 48 | B96D171E1DDA1A4F001B66F0 /* Products */ = { 49 | isa = PBXGroup; 50 | children = ( 51 | B96D171D1DDA1A4F001B66F0 /* XTPopViewSwift.app */, 52 | ); 53 | name = Products; 54 | sourceTree = ""; 55 | }; 56 | B96D171F1DDA1A4F001B66F0 /* XTPopViewSwift */ = { 57 | isa = PBXGroup; 58 | children = ( 59 | B96D17201DDA1A4F001B66F0 /* AppDelegate.swift */, 60 | B96D17221DDA1A4F001B66F0 /* ViewController.swift */, 61 | B96D17321DDA1A62001B66F0 /* XTPopViewSwift.swift */, 62 | B96D17241DDA1A4F001B66F0 /* Main.storyboard */, 63 | B96D17271DDA1A4F001B66F0 /* Assets.xcassets */, 64 | B96D17291DDA1A4F001B66F0 /* LaunchScreen.storyboard */, 65 | B96D172C1DDA1A4F001B66F0 /* Info.plist */, 66 | ); 67 | path = XTPopViewSwift; 68 | sourceTree = ""; 69 | }; 70 | /* End PBXGroup section */ 71 | 72 | /* Begin PBXNativeTarget section */ 73 | B96D171C1DDA1A4F001B66F0 /* XTPopViewSwift */ = { 74 | isa = PBXNativeTarget; 75 | buildConfigurationList = B96D172F1DDA1A4F001B66F0 /* Build configuration list for PBXNativeTarget "XTPopViewSwift" */; 76 | buildPhases = ( 77 | B96D17191DDA1A4F001B66F0 /* Sources */, 78 | B96D171A1DDA1A4F001B66F0 /* Frameworks */, 79 | B96D171B1DDA1A4F001B66F0 /* Resources */, 80 | ); 81 | buildRules = ( 82 | ); 83 | dependencies = ( 84 | ); 85 | name = XTPopViewSwift; 86 | productName = XTPopViewSwift; 87 | productReference = B96D171D1DDA1A4F001B66F0 /* XTPopViewSwift.app */; 88 | productType = "com.apple.product-type.application"; 89 | }; 90 | /* End PBXNativeTarget section */ 91 | 92 | /* Begin PBXProject section */ 93 | B96D17151DDA1A4F001B66F0 /* Project object */ = { 94 | isa = PBXProject; 95 | attributes = { 96 | LastSwiftUpdateCheck = 0800; 97 | LastUpgradeCheck = 0800; 98 | ORGANIZATIONNAME = summerxx; 99 | TargetAttributes = { 100 | B96D171C1DDA1A4F001B66F0 = { 101 | CreatedOnToolsVersion = 8.0; 102 | ProvisioningStyle = Automatic; 103 | }; 104 | }; 105 | }; 106 | buildConfigurationList = B96D17181DDA1A4F001B66F0 /* Build configuration list for PBXProject "XTPopViewSwift" */; 107 | compatibilityVersion = "Xcode 3.2"; 108 | developmentRegion = English; 109 | hasScannedForEncodings = 0; 110 | knownRegions = ( 111 | en, 112 | Base, 113 | ); 114 | mainGroup = B96D17141DDA1A4F001B66F0; 115 | productRefGroup = B96D171E1DDA1A4F001B66F0 /* Products */; 116 | projectDirPath = ""; 117 | projectRoot = ""; 118 | targets = ( 119 | B96D171C1DDA1A4F001B66F0 /* XTPopViewSwift */, 120 | ); 121 | }; 122 | /* End PBXProject section */ 123 | 124 | /* Begin PBXResourcesBuildPhase section */ 125 | B96D171B1DDA1A4F001B66F0 /* Resources */ = { 126 | isa = PBXResourcesBuildPhase; 127 | buildActionMask = 2147483647; 128 | files = ( 129 | B96D172B1DDA1A4F001B66F0 /* LaunchScreen.storyboard in Resources */, 130 | B96D17281DDA1A4F001B66F0 /* Assets.xcassets in Resources */, 131 | B96D17261DDA1A4F001B66F0 /* Main.storyboard in Resources */, 132 | ); 133 | runOnlyForDeploymentPostprocessing = 0; 134 | }; 135 | /* End PBXResourcesBuildPhase section */ 136 | 137 | /* Begin PBXSourcesBuildPhase section */ 138 | B96D17191DDA1A4F001B66F0 /* Sources */ = { 139 | isa = PBXSourcesBuildPhase; 140 | buildActionMask = 2147483647; 141 | files = ( 142 | B96D17231DDA1A4F001B66F0 /* ViewController.swift in Sources */, 143 | B96D17211DDA1A4F001B66F0 /* AppDelegate.swift in Sources */, 144 | B96D17331DDA1A62001B66F0 /* XTPopViewSwift.swift in Sources */, 145 | ); 146 | runOnlyForDeploymentPostprocessing = 0; 147 | }; 148 | /* End PBXSourcesBuildPhase section */ 149 | 150 | /* Begin PBXVariantGroup section */ 151 | B96D17241DDA1A4F001B66F0 /* Main.storyboard */ = { 152 | isa = PBXVariantGroup; 153 | children = ( 154 | B96D17251DDA1A4F001B66F0 /* Base */, 155 | ); 156 | name = Main.storyboard; 157 | sourceTree = ""; 158 | }; 159 | B96D17291DDA1A4F001B66F0 /* LaunchScreen.storyboard */ = { 160 | isa = PBXVariantGroup; 161 | children = ( 162 | B96D172A1DDA1A4F001B66F0 /* Base */, 163 | ); 164 | name = LaunchScreen.storyboard; 165 | sourceTree = ""; 166 | }; 167 | /* End PBXVariantGroup section */ 168 | 169 | /* Begin XCBuildConfiguration section */ 170 | B96D172D1DDA1A4F001B66F0 /* Debug */ = { 171 | isa = XCBuildConfiguration; 172 | buildSettings = { 173 | ALWAYS_SEARCH_USER_PATHS = NO; 174 | CLANG_ANALYZER_NONNULL = YES; 175 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 176 | CLANG_CXX_LIBRARY = "libc++"; 177 | CLANG_ENABLE_MODULES = YES; 178 | CLANG_ENABLE_OBJC_ARC = YES; 179 | CLANG_WARN_BOOL_CONVERSION = YES; 180 | CLANG_WARN_CONSTANT_CONVERSION = YES; 181 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 182 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 183 | CLANG_WARN_EMPTY_BODY = YES; 184 | CLANG_WARN_ENUM_CONVERSION = YES; 185 | CLANG_WARN_INFINITE_RECURSION = YES; 186 | CLANG_WARN_INT_CONVERSION = YES; 187 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 188 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 189 | CLANG_WARN_UNREACHABLE_CODE = YES; 190 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 191 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 192 | COPY_PHASE_STRIP = NO; 193 | DEBUG_INFORMATION_FORMAT = dwarf; 194 | ENABLE_STRICT_OBJC_MSGSEND = YES; 195 | ENABLE_TESTABILITY = YES; 196 | GCC_C_LANGUAGE_STANDARD = gnu99; 197 | GCC_DYNAMIC_NO_PIC = NO; 198 | GCC_NO_COMMON_BLOCKS = YES; 199 | GCC_OPTIMIZATION_LEVEL = 0; 200 | GCC_PREPROCESSOR_DEFINITIONS = ( 201 | "DEBUG=1", 202 | "$(inherited)", 203 | ); 204 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 205 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 206 | GCC_WARN_UNDECLARED_SELECTOR = YES; 207 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 208 | GCC_WARN_UNUSED_FUNCTION = YES; 209 | GCC_WARN_UNUSED_VARIABLE = YES; 210 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 211 | MTL_ENABLE_DEBUG_INFO = YES; 212 | ONLY_ACTIVE_ARCH = YES; 213 | SDKROOT = iphoneos; 214 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 215 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 216 | TARGETED_DEVICE_FAMILY = "1,2"; 217 | }; 218 | name = Debug; 219 | }; 220 | B96D172E1DDA1A4F001B66F0 /* Release */ = { 221 | isa = XCBuildConfiguration; 222 | buildSettings = { 223 | ALWAYS_SEARCH_USER_PATHS = NO; 224 | CLANG_ANALYZER_NONNULL = YES; 225 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 226 | CLANG_CXX_LIBRARY = "libc++"; 227 | CLANG_ENABLE_MODULES = YES; 228 | CLANG_ENABLE_OBJC_ARC = YES; 229 | CLANG_WARN_BOOL_CONVERSION = YES; 230 | CLANG_WARN_CONSTANT_CONVERSION = YES; 231 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 232 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 233 | CLANG_WARN_EMPTY_BODY = YES; 234 | CLANG_WARN_ENUM_CONVERSION = YES; 235 | CLANG_WARN_INFINITE_RECURSION = YES; 236 | CLANG_WARN_INT_CONVERSION = YES; 237 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 238 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 239 | CLANG_WARN_UNREACHABLE_CODE = YES; 240 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 241 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 242 | COPY_PHASE_STRIP = NO; 243 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 244 | ENABLE_NS_ASSERTIONS = NO; 245 | ENABLE_STRICT_OBJC_MSGSEND = YES; 246 | GCC_C_LANGUAGE_STANDARD = gnu99; 247 | GCC_NO_COMMON_BLOCKS = YES; 248 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 249 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 250 | GCC_WARN_UNDECLARED_SELECTOR = YES; 251 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 252 | GCC_WARN_UNUSED_FUNCTION = YES; 253 | GCC_WARN_UNUSED_VARIABLE = YES; 254 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 255 | MTL_ENABLE_DEBUG_INFO = NO; 256 | SDKROOT = iphoneos; 257 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 258 | TARGETED_DEVICE_FAMILY = "1,2"; 259 | VALIDATE_PRODUCT = YES; 260 | }; 261 | name = Release; 262 | }; 263 | B96D17301DDA1A4F001B66F0 /* Debug */ = { 264 | isa = XCBuildConfiguration; 265 | buildSettings = { 266 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 267 | INFOPLIST_FILE = XTPopViewSwift/Info.plist; 268 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 269 | PRODUCT_BUNDLE_IDENTIFIER = summerxx.com.XTPopViewSwift; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | SWIFT_VERSION = 3.0; 272 | }; 273 | name = Debug; 274 | }; 275 | B96D17311DDA1A4F001B66F0 /* Release */ = { 276 | isa = XCBuildConfiguration; 277 | buildSettings = { 278 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 279 | INFOPLIST_FILE = XTPopViewSwift/Info.plist; 280 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 281 | PRODUCT_BUNDLE_IDENTIFIER = summerxx.com.XTPopViewSwift; 282 | PRODUCT_NAME = "$(TARGET_NAME)"; 283 | SWIFT_VERSION = 3.0; 284 | }; 285 | name = Release; 286 | }; 287 | /* End XCBuildConfiguration section */ 288 | 289 | /* Begin XCConfigurationList section */ 290 | B96D17181DDA1A4F001B66F0 /* Build configuration list for PBXProject "XTPopViewSwift" */ = { 291 | isa = XCConfigurationList; 292 | buildConfigurations = ( 293 | B96D172D1DDA1A4F001B66F0 /* Debug */, 294 | B96D172E1DDA1A4F001B66F0 /* Release */, 295 | ); 296 | defaultConfigurationIsVisible = 0; 297 | defaultConfigurationName = Release; 298 | }; 299 | B96D172F1DDA1A4F001B66F0 /* Build configuration list for PBXNativeTarget "XTPopViewSwift" */ = { 300 | isa = XCConfigurationList; 301 | buildConfigurations = ( 302 | B96D17301DDA1A4F001B66F0 /* Debug */, 303 | B96D17311DDA1A4F001B66F0 /* Release */, 304 | ); 305 | defaultConfigurationIsVisible = 0; 306 | }; 307 | /* End XCConfigurationList section */ 308 | }; 309 | rootObject = B96D17151DDA1A4F001B66F0 /* Project object */; 310 | } 311 | -------------------------------------------------------------------------------- /XTPopView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0464E3EB1D48FD8800C637EA /* XTPopNormalView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0464E3EA1D48FD8800C637EA /* XTPopNormalView.m */; }; 11 | BC32AD681D2E369700AF5278 /* XTPopTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC32AD671D2E369700AF5278 /* XTPopTableView.m */; }; 12 | BC81569F1CF29569001AD81F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC81569E1CF29569001AD81F /* main.m */; }; 13 | BC8156A21CF29569001AD81F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156A11CF29569001AD81F /* AppDelegate.m */; }; 14 | BC8156A51CF29569001AD81F /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156A41CF29569001AD81F /* ViewController.m */; }; 15 | BC8156A81CF29569001AD81F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BC8156A61CF29569001AD81F /* Main.storyboard */; }; 16 | BC8156AA1CF29569001AD81F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BC8156A91CF29569001AD81F /* Assets.xcassets */; }; 17 | BC8156AD1CF29569001AD81F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BC8156AB1CF29569001AD81F /* LaunchScreen.storyboard */; }; 18 | BC8156B81CF29569001AD81F /* XTPopViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156B71CF29569001AD81F /* XTPopViewTests.m */; }; 19 | BC8156C31CF29569001AD81F /* XTPopViewUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156C21CF29569001AD81F /* XTPopViewUITests.m */; }; 20 | BC8156E31CF2E199001AD81F /* 扫一扫.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E21CF2E199001AD81F /* 扫一扫.png */; }; 21 | BC8156E51CF2E1B8001AD81F /* 添加朋友.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E41CF2E1B8001AD81F /* 添加朋友.png */; }; 22 | BC8156E71CF2E1FD001AD81F /* 付款.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E61CF2E1FD001AD81F /* 付款.png */; }; 23 | BC8156E91CF2E258001AD81F /* 发起群聊.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E81CF2E258001AD81F /* 发起群聊.png */; }; 24 | BC8156EE1CF302DB001AD81F /* XTPopViewBase.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156ED1CF302DB001AD81F /* XTPopViewBase.m */; }; 25 | D54BF21922687B1F00DE545B /* ExportOptions.plist in Resources */ = {isa = PBXBuildFile; fileRef = D54BF21822687B1F00DE545B /* ExportOptions.plist */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | BC8156B41CF29569001AD81F /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = BC8156921CF29569001AD81F /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = BC8156991CF29569001AD81F; 34 | remoteInfo = XTPopView; 35 | }; 36 | BC8156BF1CF29569001AD81F /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = BC8156921CF29569001AD81F /* Project object */; 39 | proxyType = 1; 40 | remoteGlobalIDString = BC8156991CF29569001AD81F; 41 | remoteInfo = XTPopView; 42 | }; 43 | /* End PBXContainerItemProxy section */ 44 | 45 | /* Begin PBXFileReference section */ 46 | 0464E3E91D48FD8800C637EA /* XTPopNormalView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XTPopNormalView.h; sourceTree = ""; }; 47 | 0464E3EA1D48FD8800C637EA /* XTPopNormalView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XTPopNormalView.m; sourceTree = ""; }; 48 | BC32AD661D2E369700AF5278 /* XTPopTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XTPopTableView.h; sourceTree = ""; }; 49 | BC32AD671D2E369700AF5278 /* XTPopTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XTPopTableView.m; sourceTree = ""; }; 50 | BC32AD6C1D2E591200AF5278 /* XTPopView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XTPopView.h; sourceTree = ""; }; 51 | BC81569A1CF29569001AD81F /* XTPopView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XTPopView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | BC81569E1CF29569001AD81F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 53 | BC8156A01CF29569001AD81F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 54 | BC8156A11CF29569001AD81F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 55 | BC8156A31CF29569001AD81F /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 56 | BC8156A41CF29569001AD81F /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 57 | BC8156A71CF29569001AD81F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 58 | BC8156A91CF29569001AD81F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 59 | BC8156AC1CF29569001AD81F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 60 | BC8156AE1CF29569001AD81F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 61 | BC8156B31CF29569001AD81F /* XTPopViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XTPopViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | BC8156B71CF29569001AD81F /* XTPopViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XTPopViewTests.m; sourceTree = ""; }; 63 | BC8156B91CF29569001AD81F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | BC8156BE1CF29569001AD81F /* XTPopViewUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XTPopViewUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 65 | BC8156C21CF29569001AD81F /* XTPopViewUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XTPopViewUITests.m; sourceTree = ""; }; 66 | BC8156C41CF29569001AD81F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 67 | BC8156E21CF2E199001AD81F /* 扫一扫.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "扫一扫.png"; sourceTree = ""; }; 68 | BC8156E41CF2E1B8001AD81F /* 添加朋友.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "添加朋友.png"; sourceTree = ""; }; 69 | BC8156E61CF2E1FD001AD81F /* 付款.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "付款.png"; sourceTree = ""; }; 70 | BC8156E81CF2E258001AD81F /* 发起群聊.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "发起群聊.png"; sourceTree = ""; }; 71 | BC8156EC1CF302DB001AD81F /* XTPopViewBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XTPopViewBase.h; sourceTree = ""; }; 72 | BC8156ED1CF302DB001AD81F /* XTPopViewBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XTPopViewBase.m; sourceTree = ""; }; 73 | D54BF21822687B1F00DE545B /* ExportOptions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ExportOptions.plist; sourceTree = ""; }; 74 | /* End PBXFileReference section */ 75 | 76 | /* Begin PBXFrameworksBuildPhase section */ 77 | BC8156971CF29569001AD81F /* Frameworks */ = { 78 | isa = PBXFrameworksBuildPhase; 79 | buildActionMask = 2147483647; 80 | files = ( 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | BC8156B01CF29569001AD81F /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | BC8156BB1CF29569001AD81F /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | /* End PBXFrameworksBuildPhase section */ 99 | 100 | /* Begin PBXGroup section */ 101 | BC8156911CF29569001AD81F = { 102 | isa = PBXGroup; 103 | children = ( 104 | BC81569C1CF29569001AD81F /* XTPopView */, 105 | BC8156B61CF29569001AD81F /* XTPopViewTests */, 106 | BC8156C11CF29569001AD81F /* XTPopViewUITests */, 107 | BC81569B1CF29569001AD81F /* Products */, 108 | ); 109 | sourceTree = ""; 110 | }; 111 | BC81569B1CF29569001AD81F /* Products */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | BC81569A1CF29569001AD81F /* XTPopView.app */, 115 | BC8156B31CF29569001AD81F /* XTPopViewTests.xctest */, 116 | BC8156BE1CF29569001AD81F /* XTPopViewUITests.xctest */, 117 | ); 118 | name = Products; 119 | sourceTree = ""; 120 | }; 121 | BC81569C1CF29569001AD81F /* XTPopView */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | D54BF21822687B1F00DE545B /* ExportOptions.plist */, 125 | BC8156EB1CF302DB001AD81F /* XTPopView */, 126 | BC8156A01CF29569001AD81F /* AppDelegate.h */, 127 | BC8156A11CF29569001AD81F /* AppDelegate.m */, 128 | BC8156A31CF29569001AD81F /* ViewController.h */, 129 | BC8156A41CF29569001AD81F /* ViewController.m */, 130 | BC8156A61CF29569001AD81F /* Main.storyboard */, 131 | BC8156A91CF29569001AD81F /* Assets.xcassets */, 132 | BC8156AB1CF29569001AD81F /* LaunchScreen.storyboard */, 133 | BC8156AE1CF29569001AD81F /* Info.plist */, 134 | BC81569D1CF29569001AD81F /* Supporting Files */, 135 | ); 136 | path = XTPopView; 137 | sourceTree = ""; 138 | }; 139 | BC81569D1CF29569001AD81F /* Supporting Files */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | BC8156E81CF2E258001AD81F /* 发起群聊.png */, 143 | BC8156E61CF2E1FD001AD81F /* 付款.png */, 144 | BC8156E41CF2E1B8001AD81F /* 添加朋友.png */, 145 | BC8156E21CF2E199001AD81F /* 扫一扫.png */, 146 | BC81569E1CF29569001AD81F /* main.m */, 147 | ); 148 | name = "Supporting Files"; 149 | sourceTree = ""; 150 | }; 151 | BC8156B61CF29569001AD81F /* XTPopViewTests */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | BC8156B71CF29569001AD81F /* XTPopViewTests.m */, 155 | BC8156B91CF29569001AD81F /* Info.plist */, 156 | ); 157 | path = XTPopViewTests; 158 | sourceTree = ""; 159 | }; 160 | BC8156C11CF29569001AD81F /* XTPopViewUITests */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | BC8156C21CF29569001AD81F /* XTPopViewUITests.m */, 164 | BC8156C41CF29569001AD81F /* Info.plist */, 165 | ); 166 | path = XTPopViewUITests; 167 | sourceTree = ""; 168 | }; 169 | BC8156EB1CF302DB001AD81F /* XTPopView */ = { 170 | isa = PBXGroup; 171 | children = ( 172 | BC32AD6C1D2E591200AF5278 /* XTPopView.h */, 173 | BC8156EC1CF302DB001AD81F /* XTPopViewBase.h */, 174 | BC8156ED1CF302DB001AD81F /* XTPopViewBase.m */, 175 | BC32AD661D2E369700AF5278 /* XTPopTableView.h */, 176 | BC32AD671D2E369700AF5278 /* XTPopTableView.m */, 177 | 0464E3E91D48FD8800C637EA /* XTPopNormalView.h */, 178 | 0464E3EA1D48FD8800C637EA /* XTPopNormalView.m */, 179 | ); 180 | path = XTPopView; 181 | sourceTree = ""; 182 | }; 183 | /* End PBXGroup section */ 184 | 185 | /* Begin PBXNativeTarget section */ 186 | BC8156991CF29569001AD81F /* XTPopView */ = { 187 | isa = PBXNativeTarget; 188 | buildConfigurationList = BC8156C71CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopView" */; 189 | buildPhases = ( 190 | BC8156961CF29569001AD81F /* Sources */, 191 | BC8156971CF29569001AD81F /* Frameworks */, 192 | BC8156981CF29569001AD81F /* Resources */, 193 | ); 194 | buildRules = ( 195 | ); 196 | dependencies = ( 197 | ); 198 | name = XTPopView; 199 | productName = XTPopView; 200 | productReference = BC81569A1CF29569001AD81F /* XTPopView.app */; 201 | productType = "com.apple.product-type.application"; 202 | }; 203 | BC8156B21CF29569001AD81F /* XTPopViewTests */ = { 204 | isa = PBXNativeTarget; 205 | buildConfigurationList = BC8156CA1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewTests" */; 206 | buildPhases = ( 207 | BC8156AF1CF29569001AD81F /* Sources */, 208 | BC8156B01CF29569001AD81F /* Frameworks */, 209 | BC8156B11CF29569001AD81F /* Resources */, 210 | ); 211 | buildRules = ( 212 | ); 213 | dependencies = ( 214 | BC8156B51CF29569001AD81F /* PBXTargetDependency */, 215 | ); 216 | name = XTPopViewTests; 217 | productName = XTPopViewTests; 218 | productReference = BC8156B31CF29569001AD81F /* XTPopViewTests.xctest */; 219 | productType = "com.apple.product-type.bundle.unit-test"; 220 | }; 221 | BC8156BD1CF29569001AD81F /* XTPopViewUITests */ = { 222 | isa = PBXNativeTarget; 223 | buildConfigurationList = BC8156CD1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewUITests" */; 224 | buildPhases = ( 225 | BC8156BA1CF29569001AD81F /* Sources */, 226 | BC8156BB1CF29569001AD81F /* Frameworks */, 227 | BC8156BC1CF29569001AD81F /* Resources */, 228 | ); 229 | buildRules = ( 230 | ); 231 | dependencies = ( 232 | BC8156C01CF29569001AD81F /* PBXTargetDependency */, 233 | ); 234 | name = XTPopViewUITests; 235 | productName = XTPopViewUITests; 236 | productReference = BC8156BE1CF29569001AD81F /* XTPopViewUITests.xctest */; 237 | productType = "com.apple.product-type.bundle.ui-testing"; 238 | }; 239 | /* End PBXNativeTarget section */ 240 | 241 | /* Begin PBXProject section */ 242 | BC8156921CF29569001AD81F /* Project object */ = { 243 | isa = PBXProject; 244 | attributes = { 245 | LastUpgradeCheck = 0730; 246 | ORGANIZATIONNAME = "夏天"; 247 | TargetAttributes = { 248 | BC8156991CF29569001AD81F = { 249 | CreatedOnToolsVersion = 7.3; 250 | }; 251 | BC8156B21CF29569001AD81F = { 252 | CreatedOnToolsVersion = 7.3; 253 | TestTargetID = BC8156991CF29569001AD81F; 254 | }; 255 | BC8156BD1CF29569001AD81F = { 256 | CreatedOnToolsVersion = 7.3; 257 | TestTargetID = BC8156991CF29569001AD81F; 258 | }; 259 | }; 260 | }; 261 | buildConfigurationList = BC8156951CF29569001AD81F /* Build configuration list for PBXProject "XTPopView" */; 262 | compatibilityVersion = "Xcode 3.2"; 263 | developmentRegion = English; 264 | hasScannedForEncodings = 0; 265 | knownRegions = ( 266 | en, 267 | Base, 268 | ); 269 | mainGroup = BC8156911CF29569001AD81F; 270 | productRefGroup = BC81569B1CF29569001AD81F /* Products */; 271 | projectDirPath = ""; 272 | projectRoot = ""; 273 | targets = ( 274 | BC8156991CF29569001AD81F /* XTPopView */, 275 | BC8156B21CF29569001AD81F /* XTPopViewTests */, 276 | BC8156BD1CF29569001AD81F /* XTPopViewUITests */, 277 | ); 278 | }; 279 | /* End PBXProject section */ 280 | 281 | /* Begin PBXResourcesBuildPhase section */ 282 | BC8156981CF29569001AD81F /* Resources */ = { 283 | isa = PBXResourcesBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | BC8156AD1CF29569001AD81F /* LaunchScreen.storyboard in Resources */, 287 | BC8156E71CF2E1FD001AD81F /* 付款.png in Resources */, 288 | BC8156E51CF2E1B8001AD81F /* 添加朋友.png in Resources */, 289 | D54BF21922687B1F00DE545B /* ExportOptions.plist in Resources */, 290 | BC8156E31CF2E199001AD81F /* 扫一扫.png in Resources */, 291 | BC8156E91CF2E258001AD81F /* 发起群聊.png in Resources */, 292 | BC8156AA1CF29569001AD81F /* Assets.xcassets in Resources */, 293 | BC8156A81CF29569001AD81F /* Main.storyboard in Resources */, 294 | ); 295 | runOnlyForDeploymentPostprocessing = 0; 296 | }; 297 | BC8156B11CF29569001AD81F /* Resources */ = { 298 | isa = PBXResourcesBuildPhase; 299 | buildActionMask = 2147483647; 300 | files = ( 301 | ); 302 | runOnlyForDeploymentPostprocessing = 0; 303 | }; 304 | BC8156BC1CF29569001AD81F /* Resources */ = { 305 | isa = PBXResourcesBuildPhase; 306 | buildActionMask = 2147483647; 307 | files = ( 308 | ); 309 | runOnlyForDeploymentPostprocessing = 0; 310 | }; 311 | /* End PBXResourcesBuildPhase section */ 312 | 313 | /* Begin PBXSourcesBuildPhase section */ 314 | BC8156961CF29569001AD81F /* Sources */ = { 315 | isa = PBXSourcesBuildPhase; 316 | buildActionMask = 2147483647; 317 | files = ( 318 | BC8156EE1CF302DB001AD81F /* XTPopViewBase.m in Sources */, 319 | BC32AD681D2E369700AF5278 /* XTPopTableView.m in Sources */, 320 | BC8156A51CF29569001AD81F /* ViewController.m in Sources */, 321 | 0464E3EB1D48FD8800C637EA /* XTPopNormalView.m in Sources */, 322 | BC8156A21CF29569001AD81F /* AppDelegate.m in Sources */, 323 | BC81569F1CF29569001AD81F /* main.m in Sources */, 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | }; 327 | BC8156AF1CF29569001AD81F /* Sources */ = { 328 | isa = PBXSourcesBuildPhase; 329 | buildActionMask = 2147483647; 330 | files = ( 331 | BC8156B81CF29569001AD81F /* XTPopViewTests.m in Sources */, 332 | ); 333 | runOnlyForDeploymentPostprocessing = 0; 334 | }; 335 | BC8156BA1CF29569001AD81F /* Sources */ = { 336 | isa = PBXSourcesBuildPhase; 337 | buildActionMask = 2147483647; 338 | files = ( 339 | BC8156C31CF29569001AD81F /* XTPopViewUITests.m in Sources */, 340 | ); 341 | runOnlyForDeploymentPostprocessing = 0; 342 | }; 343 | /* End PBXSourcesBuildPhase section */ 344 | 345 | /* Begin PBXTargetDependency section */ 346 | BC8156B51CF29569001AD81F /* PBXTargetDependency */ = { 347 | isa = PBXTargetDependency; 348 | target = BC8156991CF29569001AD81F /* XTPopView */; 349 | targetProxy = BC8156B41CF29569001AD81F /* PBXContainerItemProxy */; 350 | }; 351 | BC8156C01CF29569001AD81F /* PBXTargetDependency */ = { 352 | isa = PBXTargetDependency; 353 | target = BC8156991CF29569001AD81F /* XTPopView */; 354 | targetProxy = BC8156BF1CF29569001AD81F /* PBXContainerItemProxy */; 355 | }; 356 | /* End PBXTargetDependency section */ 357 | 358 | /* Begin PBXVariantGroup section */ 359 | BC8156A61CF29569001AD81F /* Main.storyboard */ = { 360 | isa = PBXVariantGroup; 361 | children = ( 362 | BC8156A71CF29569001AD81F /* Base */, 363 | ); 364 | name = Main.storyboard; 365 | sourceTree = ""; 366 | }; 367 | BC8156AB1CF29569001AD81F /* LaunchScreen.storyboard */ = { 368 | isa = PBXVariantGroup; 369 | children = ( 370 | BC8156AC1CF29569001AD81F /* Base */, 371 | ); 372 | name = LaunchScreen.storyboard; 373 | sourceTree = ""; 374 | }; 375 | /* End PBXVariantGroup section */ 376 | 377 | /* Begin XCBuildConfiguration section */ 378 | BC8156C51CF29569001AD81F /* Debug */ = { 379 | isa = XCBuildConfiguration; 380 | buildSettings = { 381 | ALWAYS_SEARCH_USER_PATHS = NO; 382 | CLANG_ANALYZER_NONNULL = YES; 383 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 384 | CLANG_CXX_LIBRARY = "libc++"; 385 | CLANG_ENABLE_MODULES = YES; 386 | CLANG_ENABLE_OBJC_ARC = YES; 387 | CLANG_WARN_BOOL_CONVERSION = YES; 388 | CLANG_WARN_CONSTANT_CONVERSION = YES; 389 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 390 | CLANG_WARN_EMPTY_BODY = YES; 391 | CLANG_WARN_ENUM_CONVERSION = YES; 392 | CLANG_WARN_INT_CONVERSION = YES; 393 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 394 | CLANG_WARN_UNREACHABLE_CODE = YES; 395 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 396 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 397 | COPY_PHASE_STRIP = NO; 398 | DEBUG_INFORMATION_FORMAT = dwarf; 399 | ENABLE_STRICT_OBJC_MSGSEND = YES; 400 | ENABLE_TESTABILITY = YES; 401 | GCC_C_LANGUAGE_STANDARD = gnu99; 402 | GCC_DYNAMIC_NO_PIC = NO; 403 | GCC_NO_COMMON_BLOCKS = YES; 404 | GCC_OPTIMIZATION_LEVEL = 0; 405 | GCC_PREPROCESSOR_DEFINITIONS = ( 406 | "DEBUG=1", 407 | "$(inherited)", 408 | ); 409 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 410 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 411 | GCC_WARN_UNDECLARED_SELECTOR = YES; 412 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 413 | GCC_WARN_UNUSED_FUNCTION = YES; 414 | GCC_WARN_UNUSED_VARIABLE = YES; 415 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 416 | MTL_ENABLE_DEBUG_INFO = YES; 417 | ONLY_ACTIVE_ARCH = YES; 418 | SDKROOT = iphoneos; 419 | TARGETED_DEVICE_FAMILY = "1,2"; 420 | }; 421 | name = Debug; 422 | }; 423 | BC8156C61CF29569001AD81F /* Release */ = { 424 | isa = XCBuildConfiguration; 425 | buildSettings = { 426 | ALWAYS_SEARCH_USER_PATHS = NO; 427 | CLANG_ANALYZER_NONNULL = YES; 428 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 429 | CLANG_CXX_LIBRARY = "libc++"; 430 | CLANG_ENABLE_MODULES = YES; 431 | CLANG_ENABLE_OBJC_ARC = YES; 432 | CLANG_WARN_BOOL_CONVERSION = YES; 433 | CLANG_WARN_CONSTANT_CONVERSION = YES; 434 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 435 | CLANG_WARN_EMPTY_BODY = YES; 436 | CLANG_WARN_ENUM_CONVERSION = YES; 437 | CLANG_WARN_INT_CONVERSION = YES; 438 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 439 | CLANG_WARN_UNREACHABLE_CODE = YES; 440 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 441 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 442 | COPY_PHASE_STRIP = NO; 443 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 444 | ENABLE_NS_ASSERTIONS = NO; 445 | ENABLE_STRICT_OBJC_MSGSEND = YES; 446 | GCC_C_LANGUAGE_STANDARD = gnu99; 447 | GCC_NO_COMMON_BLOCKS = YES; 448 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 449 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 450 | GCC_WARN_UNDECLARED_SELECTOR = YES; 451 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 452 | GCC_WARN_UNUSED_FUNCTION = YES; 453 | GCC_WARN_UNUSED_VARIABLE = YES; 454 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 455 | MTL_ENABLE_DEBUG_INFO = NO; 456 | SDKROOT = iphoneos; 457 | TARGETED_DEVICE_FAMILY = "1,2"; 458 | VALIDATE_PRODUCT = YES; 459 | }; 460 | name = Release; 461 | }; 462 | BC8156C81CF29569001AD81F /* Debug */ = { 463 | isa = XCBuildConfiguration; 464 | buildSettings = { 465 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 466 | INFOPLIST_FILE = XTPopView/Info.plist; 467 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 468 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 469 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopView"; 470 | PRODUCT_NAME = "$(TARGET_NAME)"; 471 | }; 472 | name = Debug; 473 | }; 474 | BC8156C91CF29569001AD81F /* Release */ = { 475 | isa = XCBuildConfiguration; 476 | buildSettings = { 477 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 478 | INFOPLIST_FILE = XTPopView/Info.plist; 479 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 480 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 481 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopView"; 482 | PRODUCT_NAME = "$(TARGET_NAME)"; 483 | }; 484 | name = Release; 485 | }; 486 | BC8156CB1CF29569001AD81F /* Debug */ = { 487 | isa = XCBuildConfiguration; 488 | buildSettings = { 489 | BUNDLE_LOADER = "$(TEST_HOST)"; 490 | INFOPLIST_FILE = XTPopViewTests/Info.plist; 491 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 492 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewTests"; 493 | PRODUCT_NAME = "$(TARGET_NAME)"; 494 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XTPopView.app/XTPopView"; 495 | }; 496 | name = Debug; 497 | }; 498 | BC8156CC1CF29569001AD81F /* Release */ = { 499 | isa = XCBuildConfiguration; 500 | buildSettings = { 501 | BUNDLE_LOADER = "$(TEST_HOST)"; 502 | INFOPLIST_FILE = XTPopViewTests/Info.plist; 503 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 504 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewTests"; 505 | PRODUCT_NAME = "$(TARGET_NAME)"; 506 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XTPopView.app/XTPopView"; 507 | }; 508 | name = Release; 509 | }; 510 | BC8156CE1CF29569001AD81F /* Debug */ = { 511 | isa = XCBuildConfiguration; 512 | buildSettings = { 513 | INFOPLIST_FILE = XTPopViewUITests/Info.plist; 514 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 515 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewUITests"; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | TEST_TARGET_NAME = XTPopView; 518 | }; 519 | name = Debug; 520 | }; 521 | BC8156CF1CF29569001AD81F /* Release */ = { 522 | isa = XCBuildConfiguration; 523 | buildSettings = { 524 | INFOPLIST_FILE = XTPopViewUITests/Info.plist; 525 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 526 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewUITests"; 527 | PRODUCT_NAME = "$(TARGET_NAME)"; 528 | TEST_TARGET_NAME = XTPopView; 529 | }; 530 | name = Release; 531 | }; 532 | /* End XCBuildConfiguration section */ 533 | 534 | /* Begin XCConfigurationList section */ 535 | BC8156951CF29569001AD81F /* Build configuration list for PBXProject "XTPopView" */ = { 536 | isa = XCConfigurationList; 537 | buildConfigurations = ( 538 | BC8156C51CF29569001AD81F /* Debug */, 539 | BC8156C61CF29569001AD81F /* Release */, 540 | ); 541 | defaultConfigurationIsVisible = 0; 542 | defaultConfigurationName = Release; 543 | }; 544 | BC8156C71CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopView" */ = { 545 | isa = XCConfigurationList; 546 | buildConfigurations = ( 547 | BC8156C81CF29569001AD81F /* Debug */, 548 | BC8156C91CF29569001AD81F /* Release */, 549 | ); 550 | defaultConfigurationIsVisible = 0; 551 | defaultConfigurationName = Release; 552 | }; 553 | BC8156CA1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewTests" */ = { 554 | isa = XCConfigurationList; 555 | buildConfigurations = ( 556 | BC8156CB1CF29569001AD81F /* Debug */, 557 | BC8156CC1CF29569001AD81F /* Release */, 558 | ); 559 | defaultConfigurationIsVisible = 0; 560 | defaultConfigurationName = Release; 561 | }; 562 | BC8156CD1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewUITests" */ = { 563 | isa = XCConfigurationList; 564 | buildConfigurations = ( 565 | BC8156CE1CF29569001AD81F /* Debug */, 566 | BC8156CF1CF29569001AD81F /* Release */, 567 | ); 568 | defaultConfigurationIsVisible = 0; 569 | defaultConfigurationName = Release; 570 | }; 571 | /* End XCConfigurationList section */ 572 | }; 573 | rootObject = BC8156921CF29569001AD81F /* Project object */; 574 | } 575 | --------------------------------------------------------------------------------