diff --git a/Codemine.xcodeproj/project.pbxproj b/Codemine.xcodeproj/project.pbxproj index 626b3d5..b45e177 100644 --- a/Codemine.xcodeproj/project.pbxproj +++ b/Codemine.xcodeproj/project.pbxproj @@ -500,11 +500,11 @@ }; 275BCA9E1C57D1B500FF3647 = { CreatedOnToolsVersion = 7.2; - LastSwiftMigration = 1010; + LastSwiftMigration = 1130; }; 275BCAA81C57D1B500FF3647 = { CreatedOnToolsVersion = 7.2; - LastSwiftMigration = 1010; + LastSwiftMigration = 1130; }; }; }; @@ -1062,7 +1062,7 @@ SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -1084,7 +1084,7 @@ SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -1096,7 +1096,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.nodes.CodemineTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -1109,7 +1109,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/Codemine/Extensions/UIView+Utilities.swift b/Codemine/Extensions/UIView+Utilities.swift index 6264b82..ff00348 100644 --- a/Codemine/Extensions/UIView+Utilities.swift +++ b/Codemine/Extensions/UIView+Utilities.swift @@ -22,18 +22,46 @@ public extension UIView { return view } - /** +/** Rounded corners for a `UIView`. - Parameters: - corners: Defines which corners should be rounded. - radius: Defines the radius of the round corners as a `CGFloat`. */ - func roundViewCorners(_ corners:UIRectCorner, radius: CGFloat) { - let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) - let mask = CAShapeLayer() - mask.path = path.cgPath - self.layer.mask = mask + func roundViewCorners(_ corners: UIRectCorner, radius: CGFloat) { + if #available(iOS 11.0, *) { + self.layer.cornerRadius = radius + self.layer.maskedCorners = getMaskedCorners(from: corners) + } else { + // Fallback on earlier versions + let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) + let mask = CAShapeLayer() + mask.path = path.cgPath + self.layer.mask = mask + } + self.layoutIfNeeded() + } + + //Helper to get CACornerMask from UIRectCorner + private func getMaskedCorners(from corners: UIRectCorner) -> CACornerMask { + var maskedCorners: CACornerMask = [] + if corners.contains(.bottomLeft) { + maskedCorners = maskedCorners.union(.layerMinXMaxYCorner) + } + if corners.contains(.bottomRight) { + maskedCorners = maskedCorners.union(.layerMaxXMaxYCorner) + } + if corners.contains(.topLeft) { + maskedCorners = maskedCorners.union(.layerMinXMinYCorner) + } + if corners.contains(.topRight) { + maskedCorners = maskedCorners.union(.layerMaxXMinYCorner) + } + if corners.contains(.allCorners) { + maskedCorners = [.layerMaxXMaxYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMinXMinYCorner] + } + return maskedCorners } }