diff --git a/Gradient View.xcodeproj/project.pbxproj b/Gradient View.xcodeproj/project.pbxproj index 832eec3..755c471 100644 --- a/Gradient View.xcodeproj/project.pbxproj +++ b/Gradient View.xcodeproj/project.pbxproj @@ -187,16 +187,16 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sam Soffes"; TargetAttributes = { 2163B9F51A25FBF000610B0C = { CreatedOnToolsVersion = 6.1; - LastSwiftMigration = 0800; + LastSwiftMigration = 0920; }; 2163BA1F1A25FBFD00610B0C = { CreatedOnToolsVersion = 6.1; - LastSwiftMigration = 0800; + LastSwiftMigration = 0920; }; }; }; @@ -286,14 +286,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = 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_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -335,14 +341,20 @@ CLANG_ENABLE_CODE_COVERAGE = NO; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = 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_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -377,6 +389,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.gradient-view.example"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -389,6 +403,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.gradient-view.example"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; }; name = Release; }; @@ -417,6 +433,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -441,6 +459,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.gradient-view"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; diff --git a/Gradient View.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Gradient View.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Gradient View.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Gradient View.xcodeproj/project.xcworkspace/xcuserdata/farzadshbfn.xcuserdatad/UserInterfaceState.xcuserstate b/Gradient View.xcodeproj/project.xcworkspace/xcuserdata/farzadshbfn.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..65a362f Binary files /dev/null and b/Gradient View.xcodeproj/project.xcworkspace/xcuserdata/farzadshbfn.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Gradient View.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Gradient View.xcodeproj/xcshareddata/xcschemes/Example.xcscheme index ad4cd24..d9b62cd 100644 --- a/Gradient View.xcodeproj/xcshareddata/xcschemes/Example.xcscheme +++ b/Gradient View.xcodeproj/xcshareddata/xcschemes/Example.xcscheme @@ -1,6 +1,6 @@ @@ -36,6 +37,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/GradientView/GradientView.swift b/GradientView/GradientView.swift index 149b8a4..1f4a95b 100644 --- a/GradientView/GradientView.swift +++ b/GradientView/GradientView.swift @@ -9,7 +9,7 @@ import UIKit /// Simple view for drawing gradients and borders. -@IBDesignable open class GradientView: UIView { +open class GradientView: UIView { // MARK: - Types @@ -19,7 +19,7 @@ import UIKit case linear /// A radial gradient. - case radial + case radial((center: CGPoint, radius: CGFloat)?) } @@ -72,14 +72,14 @@ import UIKit } /// The mode of the gradient. The default is `.Linear`. - @IBInspectable open var mode: Mode = .linear { + open var mode: Mode = .linear { didSet { setNeedsDisplay() } } /// The direction of the gradient. Only valid for the `Mode.Linear` mode. The default is `.Vertical`. - @IBInspectable open var direction: Direction = .vertical { + open var direction: Direction = .vertical { didSet { setNeedsDisplay() } @@ -131,13 +131,15 @@ import UIKit if let gradient = gradient { let options: CGGradientDrawingOptions = [.drawsAfterEndLocation] - if mode == .linear { + switch mode { + case .linear: let startPoint = CGPoint.zero let endPoint = direction == .vertical ? CGPoint(x: 0, y: size.height) : CGPoint(x: size.width, y: 0) context?.drawLinearGradient(gradient, start: startPoint, end: endPoint, options: options) - } else { - let center = CGPoint(x: bounds.midX, y: bounds.midY) - context?.drawRadialGradient(gradient, startCenter: center, startRadius: 0, endCenter: center, endRadius: min(size.width, size.height) / 2, options: options) + case .radial(let centerRadius): + let center = centerRadius?.center ?? CGPoint(x: bounds.midX, y: bounds.midY) + let radius = centerRadius?.radius ?? (min(size.width, size.height) / 2) + context?.drawRadialGradient(gradient, startCenter: center, startRadius: 0, endCenter: center, endRadius: radius, options: options) } }