SegueCatalog: Version 1.0, 2015-06-08
First public release.
This commit is contained in:
parent
101243ef8f
commit
d40c4d4efd
|
@ -0,0 +1,42 @@
|
|||
Sample code project: SegueCatalog: Customizing and Unwinding with View Controller Containment
|
||||
Version: 1.0
|
||||
|
||||
IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2015 Apple Inc. All Rights Reserved.
|
|
@ -0,0 +1,15 @@
|
|||
# SegueCatalog: Customizing and Unwinding with View Controller Containment
|
||||
|
||||
This sample demonstrates how to use External References to factor your storyboards, how to combine UIStoryboardSegue subclasses with Transition Delegates and Adaptivity, and how to use unwind segues with custom container view controllers.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Build
|
||||
|
||||
Xcode 7.0, iOS 9.0 SDK
|
||||
|
||||
### Runtime
|
||||
|
||||
iOS 9.0
|
||||
|
||||
Copyright (C) 2015 Apple Inc. All rights reserved.
|
|
@ -0,0 +1,310 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2722B23C1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2722B23B1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift */; };
|
||||
2759E0471AC24EE500948321 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2759E0461AC24EE500948321 /* AppDelegate.swift */; };
|
||||
2759E0491AC24EE500948321 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2759E0481AC24EE500948321 /* MasterViewController.swift */; };
|
||||
2759E04E1AC24EE500948321 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2759E04D1AC24EE500948321 /* Images.xcassets */; };
|
||||
2759E0511AC24EE500948321 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2759E04F1AC24EE500948321 /* LaunchScreen.xib */; };
|
||||
277E4ADB1AC5EEC500FA6F23 /* Detail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 277E4ADA1AC5EEC500FA6F23 /* Detail.storyboard */; };
|
||||
277E4ADD1AC5F00100FA6F23 /* DetailViewControllers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277E4ADC1AC5F00100FA6F23 /* DetailViewControllers.swift */; };
|
||||
277E4AE01AC5F27A00FA6F23 /* Split.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 277E4ADE1AC5F27A00FA6F23 /* Split.storyboard */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
2722B23B1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdaptableFormSheetSegue.swift; sourceTree = "<group>"; };
|
||||
2759E0431AC24EE500948321 /* SegueCatalog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SegueCatalog.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2759E0461AC24EE500948321 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
2759E0481AC24EE500948321 /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = "<group>"; };
|
||||
2759E04D1AC24EE500948321 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
2759E0501AC24EE500948321 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||
2759E0521AC24EE500948321 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
277E4ADA1AC5EEC500FA6F23 /* Detail.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Detail.storyboard; sourceTree = "<group>"; };
|
||||
277E4ADC1AC5F00100FA6F23 /* DetailViewControllers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewControllers.swift; sourceTree = "<group>"; };
|
||||
277E4ADF1AC5F27A00FA6F23 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Split.storyboard; sourceTree = "<group>"; };
|
||||
3ED1B1071B1E238300A2F343 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
2759E0401AC24EE500948321 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
2759E03A1AC24EE500948321 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3ED1B1071B1E238300A2F343 /* README.md */,
|
||||
2759E0451AC24EE500948321 /* SegueCatalog */,
|
||||
2759E0441AC24EE500948321 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2759E0441AC24EE500948321 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2759E0431AC24EE500948321 /* SegueCatalog.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2759E0451AC24EE500948321 /* SegueCatalog */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2759E0461AC24EE500948321 /* AppDelegate.swift */,
|
||||
2759E0481AC24EE500948321 /* MasterViewController.swift */,
|
||||
277E4ADC1AC5F00100FA6F23 /* DetailViewControllers.swift */,
|
||||
2722B23B1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift */,
|
||||
277E4ADE1AC5F27A00FA6F23 /* Split.storyboard */,
|
||||
277E4ADA1AC5EEC500FA6F23 /* Detail.storyboard */,
|
||||
2759E04F1AC24EE500948321 /* LaunchScreen.xib */,
|
||||
2759E0521AC24EE500948321 /* Info.plist */,
|
||||
2759E04D1AC24EE500948321 /* Images.xcassets */,
|
||||
);
|
||||
path = SegueCatalog;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
2759E0421AC24EE500948321 /* SegueCatalog */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2759E0601AC24EE500948321 /* Build configuration list for PBXNativeTarget "SegueCatalog" */;
|
||||
buildPhases = (
|
||||
2759E03F1AC24EE500948321 /* Sources */,
|
||||
2759E0401AC24EE500948321 /* Frameworks */,
|
||||
2759E0411AC24EE500948321 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = SegueCatalog;
|
||||
productName = IncrementalUnwindDemo;
|
||||
productReference = 2759E0431AC24EE500948321 /* SegueCatalog.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
2759E03B1AC24EE500948321 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0700;
|
||||
LastUpgradeCheck = 0700;
|
||||
ORGANIZATIONNAME = "Apple, Inc.";
|
||||
TargetAttributes = {
|
||||
2759E0421AC24EE500948321 = {
|
||||
CreatedOnToolsVersion = 7.0;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 2759E03E1AC24EE500948321 /* Build configuration list for PBXProject "SegueCatalog" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 2759E03A1AC24EE500948321;
|
||||
productRefGroup = 2759E0441AC24EE500948321 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
2759E0421AC24EE500948321 /* SegueCatalog */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
2759E0411AC24EE500948321 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2759E0511AC24EE500948321 /* LaunchScreen.xib in Resources */,
|
||||
2759E04E1AC24EE500948321 /* Images.xcassets in Resources */,
|
||||
277E4ADB1AC5EEC500FA6F23 /* Detail.storyboard in Resources */,
|
||||
277E4AE01AC5F27A00FA6F23 /* Split.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
2759E03F1AC24EE500948321 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
277E4ADD1AC5F00100FA6F23 /* DetailViewControllers.swift in Sources */,
|
||||
2759E0491AC24EE500948321 /* MasterViewController.swift in Sources */,
|
||||
2759E0471AC24EE500948321 /* AppDelegate.swift in Sources */,
|
||||
2722B23C1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
2759E04F1AC24EE500948321 /* LaunchScreen.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
2759E0501AC24EE500948321 /* Base */,
|
||||
);
|
||||
name = LaunchScreen.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
277E4ADE1AC5F27A00FA6F23 /* Split.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
277E4ADF1AC5F27A00FA6F23 /* Base */,
|
||||
);
|
||||
name = Split.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
2759E05E1AC24EE500948321 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2759E05F1AC24EE500948321 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
2759E0611AC24EE500948321 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/SegueCatalog/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_NAME = SegueCatalog;
|
||||
TOOLCHAINS = default;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2759E0621AC24EE500948321 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/SegueCatalog/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_NAME = SegueCatalog;
|
||||
TOOLCHAINS = default;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
2759E03E1AC24EE500948321 /* Build configuration list for PBXProject "SegueCatalog" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2759E05E1AC24EE500948321 /* Debug */,
|
||||
2759E05F1AC24EE500948321 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
2759E0601AC24EE500948321 /* Build configuration list for PBXNativeTarget "SegueCatalog" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2759E0611AC24EE500948321 /* Debug */,
|
||||
2759E0621AC24EE500948321 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 2759E03B1AC24EE500948321 /* Project object */;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Copyright (C) 2015 Apple Inc. All Rights Reserved.
|
||||
See LICENSE.txt for this sample’s licensing information
|
||||
|
||||
Abstract:
|
||||
Custom segue subclass to support the Form Sheet button.
|
||||
*/
|
||||
|
||||
import UIKit
|
||||
|
||||
/**
|
||||
This segue subclass demonstrates how to adapt a view controller that has been
|
||||
modally presented by a segue. An instance of this segue is triggered by the
|
||||
Form Sheet nav item owned by an OuterViewController. It is configured to show
|
||||
a Form Sheet presentation, but Form Sheets are not permissible in Compact
|
||||
size classes. By default, UIKit will adapt a Form Sheet presentation to a
|
||||
full-screen presentation, using the same view controller. We would like to
|
||||
provide an alternative representation in the adapted case.
|
||||
*/
|
||||
class AdaptableFormSheetSegue: UIStoryboardSegue, UIAdaptivePresentationControllerDelegate {
|
||||
override func perform() {
|
||||
/*
|
||||
Because this class is used for a Present Modally segue, UIKit will
|
||||
maintain a strong reference to this segue object for the duration of
|
||||
the presentation. That way, this segue object will live long enough
|
||||
to act as the presentation controller's delegate and customize any
|
||||
adaptation.
|
||||
*/
|
||||
destinationViewController.presentationController?.delegate = self
|
||||
|
||||
// Call super to get the standard modal presentation behavior.
|
||||
super.perform()
|
||||
}
|
||||
|
||||
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
|
||||
return traitCollection.horizontalSizeClass == .Compact ? .FullScreen : .FormSheet
|
||||
}
|
||||
|
||||
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
|
||||
/*
|
||||
Load and return the adapted view controller from the Detail storyboard.
|
||||
That storyboard is stored within the same bundle that contains this
|
||||
class.
|
||||
*/
|
||||
let adaptableFormSheetSegueBundle = NSBundle(forClass: AdaptableFormSheetSegue.self)
|
||||
|
||||
return UIStoryboard(name: "Detail", bundle: adaptableFormSheetSegueBundle).instantiateViewControllerWithIdentifier("Adapted")
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
Copyright (C) 2015 Apple Inc. All Rights Reserved.
|
||||
See LICENSE.txt for this sample’s licensing information
|
||||
|
||||
Abstract:
|
||||
Main application entry point.
|
||||
*/
|
||||
|
||||
import UIKit
|
||||
|
||||
@UIApplicationMain
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
// MARK: Properties
|
||||
|
||||
var window: UIWindow?
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8121.17" systemVersion="15A178r" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.14"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="548" y="455"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
|
@ -0,0 +1,157 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8121.17" systemVersion="15A178r" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="0uC-JR-KAh">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.14"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Split View Controller-->
|
||||
<scene sceneID="FtO-DA-zKg">
|
||||
<objects>
|
||||
<splitViewController id="0uC-JR-KAh" sceneMemberID="viewController">
|
||||
<connections>
|
||||
<segue destination="TnN-eV-uAl" kind="relationship" relationship="masterViewController" id="8C3-qG-JjP"/>
|
||||
<segue destination="aEe-mT-wgW" kind="relationship" relationship="detailViewController" id="jN0-1Q-vXF"/>
|
||||
</connections>
|
||||
</splitViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="e9k-5T-Llf" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-625" y="-960"/>
|
||||
</scene>
|
||||
<!--Root View Controller-->
|
||||
<scene sceneID="ZnS-lE-GPo">
|
||||
<objects>
|
||||
<tableViewController id="ccN-fu-gPb" customClass="MasterViewController" customModule="SegueCatalog" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="t5I-ex-YOw">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<sections>
|
||||
<tableViewSection id="xBz-tB-szP">
|
||||
<cells>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="lXI-jn-cQa" style="IBUITableViewCellStyleDefault" id="w8k-li-wXo">
|
||||
<rect key="frame" x="0.0" y="64" width="600" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="w8k-li-wXo" id="br2-RC-aDL">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Push In Master" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="lXI-jn-cQa">
|
||||
<rect key="frame" x="15" y="0.0" width="570" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</tableViewCellContentView>
|
||||
<animations/>
|
||||
<connections>
|
||||
<segue destination="FY2-Wh-6aV" kind="show" id="igj-W6-O9D">
|
||||
<nil key="action"/>
|
||||
</segue>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="hCI-gO-xqS" style="IBUITableViewCellStyleDefault" id="zz2-Zx-GZs">
|
||||
<rect key="frame" x="0.0" y="108" width="600" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zz2-Zx-GZs" id="rn5-oU-cIO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Push Detail" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hCI-gO-xqS">
|
||||
<rect key="frame" x="15" y="0.0" width="570" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</tableViewCellContentView>
|
||||
<animations/>
|
||||
<connections>
|
||||
<segue destination="aEe-mT-wgW" kind="showDetail" id="bo1-O5-wOW"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
</cells>
|
||||
</tableViewSection>
|
||||
</sections>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="ccN-fu-gPb" id="UCW-n8-DV1"/>
|
||||
<outlet property="delegate" destination="ccN-fu-gPb" id="HJQ-Tw-BXh"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<navigationItem key="navigationItem" title="Root View Controller" id="3Ff-zr-w9C"/>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="IWi-rx-sZ5" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="962" y="-960"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="X2b-8c-tiH">
|
||||
<objects>
|
||||
<viewController id="FY2-Wh-6aV" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="5Uc-gU-evA"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="i1u-RH-Ynq"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="rfg-Fz-6en">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qmy-KN-PC1">
|
||||
<rect key="frame" x="240" y="285" width="120" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Unwind in Master"/>
|
||||
<connections>
|
||||
<segue destination="ox2-sx-hGh" kind="unwind" unwindAction="unwindInMaster:" id="QZo-8p-CwL"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Qmy-KN-PC1" firstAttribute="centerX" secondItem="rfg-Fz-6en" secondAttribute="centerX" id="1Mo-rd-dsI"/>
|
||||
<constraint firstItem="Qmy-KN-PC1" firstAttribute="centerY" secondItem="rfg-Fz-6en" secondAttribute="centerY" id="w8D-jy-zZ0"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7pw-ax-JNE" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<exit id="ox2-sx-hGh" userLabel="Exit" sceneMemberID="exit"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1684" y="-961"/>
|
||||
</scene>
|
||||
<!--Detail-->
|
||||
<scene sceneID="QFU-us-tp5">
|
||||
<objects>
|
||||
<viewControllerPlaceholder storyboardName="Detail" id="aEe-mT-wgW" sceneMemberID="viewController"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="VvI-C7-VlQ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="142" y="-254"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="U8r-3c-bDE">
|
||||
<objects>
|
||||
<navigationController id="TnN-eV-uAl" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="09L-SI-He0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="ccN-fu-gPb" kind="relationship" relationship="rootViewController" id="mRe-XG-xpA"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="0sS-E3-5bv" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="142" y="-961"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="bo1-O5-wOW"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
</document>
|
|
@ -0,0 +1,407 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8121.17" systemVersion="15A178o" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="LjJ-OQ-XKf">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.14"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
<capability name="Navigation items with more than one left or right bar item" minToolsVersion="7.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="mVI-hF-azv">
|
||||
<objects>
|
||||
<navigationController id="LjJ-OQ-XKf" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="2f6-dm-5Jh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="OdU-HE-Dxa" kind="relationship" relationship="rootViewController" id="dzG-pg-xFJ"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="msU-yP-L3E" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-433" y="263"/>
|
||||
</scene>
|
||||
<!--Root View Controller-->
|
||||
<scene sceneID="Q8I-cN-jDq">
|
||||
<objects>
|
||||
<viewController id="OdU-HE-Dxa" customClass="OuterViewController" customModule="SegueCatalog" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="tQd-fo-TmS"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="hdU-Hb-scb"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="MA0-Zm-5v4">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<containerView opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="DOZ-jD-T03">
|
||||
<rect key="frame" x="150" y="150" width="300" height="300"/>
|
||||
<animations/>
|
||||
<connections>
|
||||
<segue destination="MRb-o5-mAl" kind="embed" id="zym-jm-NSR"/>
|
||||
</connections>
|
||||
</containerView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Outer Unwind Destination" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SQ6-a2-x1Q">
|
||||
<rect key="frame" x="201" y="97" width="198" height="21"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bje-nc-ttX">
|
||||
<rect key="frame" x="222" y="486" width="157" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Push A View Controller"/>
|
||||
<connections>
|
||||
<segue destination="Ma5-Sf-umx" kind="show" id="S7j-3W-hgC">
|
||||
<nil key="action"/>
|
||||
</segue>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FlI-sA-One">
|
||||
<rect key="frame" x="241" y="519" width="120" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Unwind in Master"/>
|
||||
<connections>
|
||||
<segue destination="80V-td-H6H" kind="unwind" unwindAction="unwindInMaster:" id="Isj-AZ-gMs"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="SQ6-a2-x1Q" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="40D-vW-O9L"/>
|
||||
<constraint firstItem="Bje-nc-ttX" firstAttribute="top" secondItem="DOZ-jD-T03" secondAttribute="bottom" constant="36" id="8vE-Cc-sDa"/>
|
||||
<constraint firstItem="FlI-sA-One" firstAttribute="top" secondItem="Bje-nc-ttX" secondAttribute="bottom" constant="3" id="AwD-2k-J2F"/>
|
||||
<constraint firstItem="DOZ-jD-T03" firstAttribute="width" secondItem="MA0-Zm-5v4" secondAttribute="width" multiplier="0.5" id="ZuG-Nx-78m"/>
|
||||
<constraint firstItem="DOZ-jD-T03" firstAttribute="top" secondItem="SQ6-a2-x1Q" secondAttribute="bottom" constant="32" id="arB-uo-7nQ"/>
|
||||
<constraint firstItem="DOZ-jD-T03" firstAttribute="height" secondItem="MA0-Zm-5v4" secondAttribute="height" multiplier="0.5" id="luu-ow-yCU"/>
|
||||
<constraint firstItem="DOZ-jD-T03" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="mSc-5x-XZ1"/>
|
||||
<constraint firstItem="FlI-sA-One" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="pjS-I3-Nf8"/>
|
||||
<constraint firstItem="DOZ-jD-T03" firstAttribute="centerY" secondItem="MA0-Zm-5v4" secondAttribute="centerY" id="u1y-1V-z4p"/>
|
||||
<constraint firstItem="Bje-nc-ttX" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="wJ6-s4-X6Y"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Root View Controller" id="sqR-jy-X23">
|
||||
<rightBarButtonItems>
|
||||
<barButtonItem title="Modal" id="nO0-in-yIh">
|
||||
<connections>
|
||||
<segue destination="Ma5-Sf-umx" kind="presentation" customClass="CustomAnimationPresentationSegue" customModule="SegueCatalog" customModuleProvider="target" id="AVs-Yp-OSe"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
<barButtonItem title="Form Sheet" id="B0i-ku-omR">
|
||||
<connections>
|
||||
<segue destination="iNJ-hp-jmn" kind="presentation" customClass="AdaptableFormSheetSegue" customModule="SegueCatalog" customModuleProvider="target" modalPresentationStyle="formSheet" id="oRN-eZ-icO"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
</rightBarButtonItems>
|
||||
</navigationItem>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dBN-Rn-vsV" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<exit id="80V-td-H6H" userLabel="Exit" sceneMemberID="exit"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="249" y="263"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="bfU-oh-oCm">
|
||||
<objects>
|
||||
<navigationController storyboardIdentifier="Adapted" id="Ukb-ED-zM7" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="dSW-co-rpW">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="iNJ-hp-jmn" kind="relationship" relationship="rootViewController" id="WS6-dw-WmG"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="ABV-Od-eXI" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-117" y="976"/>
|
||||
</scene>
|
||||
<!--Adapted-->
|
||||
<scene sceneID="oIr-f8-Y9B">
|
||||
<objects>
|
||||
<viewController id="iNJ-hp-jmn" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="VYw-Zf-gQb"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="Um9-VC-G86"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="PsB-gO-FdI">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rIz-51-EI8">
|
||||
<rect key="frame" x="201" y="285" width="198" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Dismiss Form Sheet to Outer"/>
|
||||
<connections>
|
||||
<segue destination="VP6-Vd-RNx" kind="unwind" unwindAction="unwindToOuter:" id="u3h-VJ-cdC"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TWG-j2-0oO">
|
||||
<rect key="frame" x="196" y="323" width="209" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Dismiss Form Sheet to Nested"/>
|
||||
<connections>
|
||||
<segue destination="VP6-Vd-RNx" kind="unwind" unwindAction="unwindToNested:" id="PgK-d7-mli"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="rIz-51-EI8" firstAttribute="centerY" secondItem="PsB-gO-FdI" secondAttribute="centerY" id="7Sb-eD-nrk"/>
|
||||
<constraint firstItem="rIz-51-EI8" firstAttribute="centerX" secondItem="PsB-gO-FdI" secondAttribute="centerX" id="7sH-Kw-VV0"/>
|
||||
<constraint firstItem="TWG-j2-0oO" firstAttribute="top" secondItem="rIz-51-EI8" secondAttribute="bottom" constant="8" id="ihf-aJ-7Fx"/>
|
||||
<constraint firstItem="TWG-j2-0oO" firstAttribute="centerX" secondItem="PsB-gO-FdI" secondAttribute="centerX" id="pMB-4O-bPP"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Adapted" id="4MZ-RK-cn7"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="awL-3E-M0L" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<exit id="VP6-Vd-RNx" userLabel="Exit" sceneMemberID="exit"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="599" y="976"/>
|
||||
</scene>
|
||||
<!--Pushed View Controller-->
|
||||
<scene sceneID="rCD-SK-cQA">
|
||||
<objects>
|
||||
<viewController id="Ma5-Sf-umx" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="d3j-5b-x7U"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="5rW-fA-8gr"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="elS-t1-IxC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="iiJ-7r-aFA">
|
||||
<rect key="frame" x="199" y="180" width="202" height="240"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DgM-NU-YB0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Push another view controller"/>
|
||||
<connections>
|
||||
<segue destination="Ma5-Sf-umx" kind="show" id="FoD-Q3-npq">
|
||||
<nil key="action"/>
|
||||
</segue>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="po4-2C-RAA">
|
||||
<rect key="frame" x="0.0" y="30" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Push a nested view controller"/>
|
||||
<connections>
|
||||
<segue destination="x9z-i3-e2K" kind="show" id="8ya-hB-1JC">
|
||||
<nil key="action"/>
|
||||
</segue>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mxw-CY-PhL">
|
||||
<rect key="frame" x="0.0" y="60" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Push without animation"/>
|
||||
<connections>
|
||||
<segue destination="x9z-i3-e2K" kind="show" animates="NO" id="Q5g-cC-c4t">
|
||||
<nil key="action"/>
|
||||
</segue>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lf6-gf-l8i">
|
||||
<rect key="frame" x="0.0" y="90" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Push with subclass"/>
|
||||
<connections>
|
||||
<segue destination="x9z-i3-e2K" kind="show" customClass="NonAnimatingSegue" customModule="SegueCatalog" customModuleProvider="target" id="stx-vP-7cp">
|
||||
<nil key="action"/>
|
||||
</segue>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1Jr-Cl-f5R">
|
||||
<rect key="frame" x="0.0" y="120" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Unwind to outer destination"/>
|
||||
<connections>
|
||||
<segue destination="QhI-B5-2TV" kind="unwind" unwindAction="unwindToOuter:" id="v4e-IQ-7f7"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zJ0-52-slb">
|
||||
<rect key="frame" x="0.0" y="150" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Unwind to inner destination"/>
|
||||
<connections>
|
||||
<segue destination="QhI-B5-2TV" kind="unwind" unwindAction="unwindToNested:" id="eFN-4w-0Om"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tb9-Uc-aw1">
|
||||
<rect key="frame" x="0.0" y="180" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Unwind in Master"/>
|
||||
<connections>
|
||||
<segue destination="QhI-B5-2TV" kind="unwind" unwindAction="unwindInMaster:" id="U9p-fj-dYt"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0UA-TP-LKb">
|
||||
<rect key="frame" x="0.0" y="210" width="202" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Unwind without animation"/>
|
||||
<connections>
|
||||
<segue destination="QhI-B5-2TV" kind="unwind" identifier="Unwind without animation" unwindAction="unwindToOuter:" id="PiQ-j6-Q5j"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.99702548980712891" green="0.87293362617492676" blue="0.87790274620056152" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="iiJ-7r-aFA" firstAttribute="centerX" secondItem="elS-t1-IxC" secondAttribute="centerX" id="624-9e-YUa"/>
|
||||
<constraint firstItem="iiJ-7r-aFA" firstAttribute="centerY" secondItem="elS-t1-IxC" secondAttribute="centerY" id="Vya-Rv-oSk"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Pushed View Controller" id="qTi-9e-ktC"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="fod-78-BIb" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<exit id="QhI-B5-2TV" userLabel="Exit" sceneMemberID="exit"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="965" y="263"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="We6-jd-G01">
|
||||
<objects>
|
||||
<viewController id="x9z-i3-e2K" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="tBd-Bi-1UV"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="HlZ-Ux-69i"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="ovm-ok-0V2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="34i-ex-6Vb">
|
||||
<rect key="frame" x="60" y="60" width="480" height="480"/>
|
||||
<animations/>
|
||||
<connections>
|
||||
<segue destination="Ma5-Sf-umx" kind="embed" id="QtS-LW-gdL"/>
|
||||
</connections>
|
||||
</containerView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.93553829193115234" green="0.86985659599304199" blue="0.99970442056655884" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="34i-ex-6Vb" firstAttribute="centerX" secondItem="ovm-ok-0V2" secondAttribute="centerX" id="3Wy-KE-D2O"/>
|
||||
<constraint firstItem="34i-ex-6Vb" firstAttribute="height" secondItem="ovm-ok-0V2" secondAttribute="height" multiplier="0.8" id="BA2-LA-9nc"/>
|
||||
<constraint firstItem="34i-ex-6Vb" firstAttribute="width" secondItem="ovm-ok-0V2" secondAttribute="width" multiplier="0.8" id="S6O-wL-pr8"/>
|
||||
<constraint firstItem="34i-ex-6Vb" firstAttribute="centerY" secondItem="ovm-ok-0V2" secondAttribute="centerY" id="cKS-at-osu"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="WhF-5P-lKa" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1670" y="263"/>
|
||||
</scene>
|
||||
<!--Nested View Controller-->
|
||||
<scene sceneID="L81-ha-xM7">
|
||||
<objects>
|
||||
<viewController automaticallyAdjustsScrollViewInsets="NO" definesPresentationContext="YES" id="MRb-o5-mAl" customClass="NestedViewController" customModule="SegueCatalog" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="qy3-FK-goe"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="D55-pz-qYa"/>
|
||||
</layoutGuides>
|
||||
<view key="view" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="0KM-fH-tP9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1zH-UW-fAP">
|
||||
<rect key="frame" x="107" y="120" width="87" height="61"/>
|
||||
<animations/>
|
||||
<string key="text">Nested
|
||||
Unwind
|
||||
Destination</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5yo-ld-OZj">
|
||||
<rect key="frame" x="58" y="189" width="184" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Modal Present Within Here"/>
|
||||
<connections>
|
||||
<segue destination="WyX-Hv-msX" kind="presentation" modalPresentationStyle="currentContext" id="YgE-RR-pMw"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.87771290540000002" green="0.95820510390000002" blue="0.99972820279999997" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="1zH-UW-fAP" firstAttribute="centerY" secondItem="0KM-fH-tP9" secondAttribute="centerY" id="VGd-mp-zxO"/>
|
||||
<constraint firstItem="5yo-ld-OZj" firstAttribute="top" secondItem="1zH-UW-fAP" secondAttribute="bottom" constant="8" symbolic="YES" id="cPb-Qd-wLR"/>
|
||||
<constraint firstItem="1zH-UW-fAP" firstAttribute="centerX" secondItem="0KM-fH-tP9" secondAttribute="centerX" id="v3i-QP-6YP"/>
|
||||
<constraint firstItem="5yo-ld-OZj" firstAttribute="centerX" secondItem="0KM-fH-tP9" secondAttribute="centerX" id="zTk-JE-PQg"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<toolbarItems/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7zI-PC-u3U" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="249" y="-284"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="Jy4-ub-4pQ">
|
||||
<objects>
|
||||
<viewController id="WyX-Hv-msX" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="IZy-9w-uXx"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="6jf-Vs-aFP"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="Hpg-sS-13k">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mDQ-vm-VY2">
|
||||
<rect key="frame" x="96" y="120" width="109" height="61"/>
|
||||
<animations/>
|
||||
<string key="text">Modal
|
||||
Presentation
|
||||
Within Nested</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fEu-Rj-5wp">
|
||||
<rect key="frame" x="60" y="189" width="181" height="30"/>
|
||||
<animations/>
|
||||
<state key="normal" title="Dismiss Modal Via Unwind"/>
|
||||
<connections>
|
||||
<segue destination="ACb-ux-jxA" kind="unwind" unwindAction="unwindToNested:" id="PUQ-F3-NtW"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.99677473306655884" green="0.8684883713722229" blue="0.99980735778808594" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="mDQ-vm-VY2" firstAttribute="centerY" secondItem="Hpg-sS-13k" secondAttribute="centerY" id="EL0-36-55Y"/>
|
||||
<constraint firstItem="mDQ-vm-VY2" firstAttribute="centerX" secondItem="Hpg-sS-13k" secondAttribute="centerX" id="Hhj-Vl-7C9"/>
|
||||
<constraint firstItem="fEu-Rj-5wp" firstAttribute="centerX" secondItem="Hpg-sS-13k" secondAttribute="centerX" id="WgR-bM-7bD"/>
|
||||
<constraint firstItem="fEu-Rj-5wp" firstAttribute="top" secondItem="mDQ-vm-VY2" secondAttribute="bottom" constant="8" symbolic="YES" id="wZt-P1-rlp"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<size key="freeformSize" width="300" height="300"/>
|
||||
</viewController>
|
||||
<exit id="ACb-ux-jxA" userLabel="Exit" sceneMemberID="exit"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="5kY-HP-qoJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="656" y="-284"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="S7j-3W-hgC"/>
|
||||
<segue reference="stx-vP-7cp"/>
|
||||
<segue reference="WS6-dw-WmG"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
</document>
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
Copyright (C) 2015 Apple Inc. All Rights Reserved.
|
||||
See LICENSE.txt for this sample’s licensing information
|
||||
|
||||
Abstract:
|
||||
The view controllers used in the Detail storyboard.
|
||||
*/
|
||||
|
||||
import UIKit
|
||||
|
||||
class NestedViewController: UIViewController {
|
||||
@IBAction func unwindToNested(segue: UIStoryboardSegue) {
|
||||
/*
|
||||
Empty. Exists solely so that "unwind to nested" segues can find instances
|
||||
of this class.
|
||||
|
||||
Notably, if an instance of this class is currently showing a Current
|
||||
Context presentation, unwinding to that instance via this action will
|
||||
only dismiss that presentation if the unwind source is contained within
|
||||
the presentation.
|
||||
|
||||
This is why the "Dismiss via Unwind" button in this app's storyboard
|
||||
will cause the containing presentation to be dismissed, while the "Unwind
|
||||
to Nested" button will not.
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
class OuterViewController: UIViewController {
|
||||
@IBAction func unwindToOuter(segue: UIStoryboardSegue) {
|
||||
/*
|
||||
Empty. Exists solely so that "unwind to outer" segues can find
|
||||
instances of this class.
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
class NonAnimatingSegue: UIStoryboardSegue {
|
||||
override func perform() {
|
||||
UIView.performWithoutAnimation {
|
||||
super.perform()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CustomAnimationPresentationSegue: UIStoryboardSegue, UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning {
|
||||
|
||||
override func perform() {
|
||||
/*
|
||||
Because this class is used for a Present Modally segue, UIKit will
|
||||
maintain a strong reference to this segue object for the duration of
|
||||
the presentation. That way, this segue object will still be around to
|
||||
provide an animation controller for the eventual dismissal, as well
|
||||
as for the initial presentation.
|
||||
*/
|
||||
destinationViewController.transitioningDelegate = self
|
||||
|
||||
super.perform()
|
||||
}
|
||||
|
||||
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
|
||||
return self
|
||||
}
|
||||
|
||||
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
|
||||
return self
|
||||
}
|
||||
|
||||
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
|
||||
return 0.5
|
||||
}
|
||||
|
||||
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
|
||||
let containerView = transitionContext.containerView()!
|
||||
|
||||
let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
|
||||
|
||||
if transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) == destinationViewController {
|
||||
// Presenting.
|
||||
UIView.performWithoutAnimation {
|
||||
toView.alpha = 0
|
||||
containerView.addSubview(toView)
|
||||
}
|
||||
|
||||
let transitionContextDuration = transitionDuration(transitionContext)
|
||||
|
||||
UIView.animateWithDuration(transitionContextDuration, animations: {
|
||||
toView.alpha = 1
|
||||
}, completion: { success in
|
||||
transitionContext.completeTransition(success)
|
||||
})
|
||||
}
|
||||
else {
|
||||
// Dismissing.
|
||||
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
|
||||
|
||||
UIView.performWithoutAnimation {
|
||||
containerView.insertSubview(toView, belowSubview: fromView)
|
||||
}
|
||||
|
||||
let transitionContextDuration = transitionDuration(transitionContext)
|
||||
|
||||
UIView.animateWithDuration(transitionContextDuration, animations: {
|
||||
fromView.alpha = 0
|
||||
}, completion: { success in
|
||||
transitionContext.completeTransition(success)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "40x40",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "76x76",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "76x76",
|
||||
"scale" : "2x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.example.apple-samplecode.SegueCatalog</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Split</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
Copyright (C) 2015 Apple Inc. All Rights Reserved.
|
||||
See LICENSE.txt for this sample’s licensing information
|
||||
|
||||
Abstract:
|
||||
The view controller used as the root of the split view's master-side navigation controller.
|
||||
*/
|
||||
|
||||
import UIKit
|
||||
|
||||
class MasterViewController: UITableViewController {
|
||||
@IBAction func unwindInMaster(segue: UIStoryboardSegue) {
|
||||
/*
|
||||
Empty. Exists solely so that "unwind in master" segues can
|
||||
find this instance as a destination.
|
||||
*/
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue