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)
}
}