From 3dae298ba14900418a8f96a27c6cce2f71342f8f Mon Sep 17 00:00:00 2001 From: Cem Olcay Date: Mon, 23 Feb 2015 10:05:39 +0200 Subject: [PATCH 1/5] updated to swift 1.2 --- .../UserInterfaceState.xcuserstate | Bin 54380 -> 80773 bytes CEMKit-Swift/CEMKit.swift | 578 +++++++----------- CEMKit-Swift/ViewController.swift | 12 +- 3 files changed, 228 insertions(+), 362 deletions(-) diff --git a/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate b/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate index d8c43105ec871026022a7d933b870c8766332c06..0950659e28d0ac9886f41c48f1ee5869aa966445 100644 GIT binary patch literal 80773 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 diff --git a/CEMKit-Swift/CEMKit.swift b/CEMKit-Swift/CEMKit.swift index 7d92b23..9e5e699 100644 --- a/CEMKit-Swift/CEMKit.swift +++ b/CEMKit-Swift/CEMKit.swift @@ -15,7 +15,6 @@ import UIKit // let APPDELEGATE: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate - // MARK: - UIView let UIViewAnimationDuration: NSTimeInterval = 1 @@ -33,7 +32,7 @@ extension UIView { h: CGFloat) { self.init (frame: CGRect (x: x, y: y, width: w, height: h)) } - + convenience init (superView: UIView) { self.init (frame: CGRect (origin: CGPointZero, size: superView.size)) } @@ -335,10 +334,9 @@ extension UIView { func pop () { setScale(1.1, y: 1.1) - spring(0.2) { - [unowned self] in + spring(0.2, animations: { [unowned self] () -> Void in self.setScale(1, y: 1) - } + }) } } @@ -449,6 +447,44 @@ extension UIView { +// MARK: - UIScrollView + +extension UIScrollView { + + var contentHeight: CGFloat { + get { + return contentSize.height + } set (value) { + contentSize = CGSize (width: contentSize.width, height: value) + } + } + + var contentWidth: CGFloat { + get { + return contentSize.height + } set (value) { + contentSize = CGSize (width: value, height: contentSize.height) + } + } + + var offsetX: CGFloat { + get { + return contentOffset.x + } set (value) { + contentOffset = CGPoint (x: value, y: contentOffset.y) + } + } + + var offsetY: CGFloat { + get { + return contentOffset.y + } set (value) { + contentOffset = CGPoint (x: contentOffset.x, y: value) + } + } +} + + // MARK: - UIViewController extension UIViewController { @@ -557,7 +593,7 @@ extension UIViewController { func pop () { navigationController?.popViewControllerAnimated(true) } - + func present (vc: UIViewController) { presentViewController(vc, animated: true, completion: nil) } @@ -568,46 +604,6 @@ extension UIViewController { } - -// MARK: - UIScrollView - -extension UIScrollView { - - var contentHeight: CGFloat { - get { - return contentSize.height - } set (value) { - contentSize = CGSize (width: contentSize.width, height: value) - } - } - - var contentWidth: CGFloat { - get { - return contentSize.height - } set (value) { - contentSize = CGSize (width: value, height: contentSize.height) - } - } - - var offsetX: CGFloat { - get { - return contentOffset.x - } set (value) { - contentOffset = CGPoint (x: value, y: contentOffset.y) - } - } - - var offsetY: CGFloat { - get { - return contentOffset.y - } set (value) { - contentOffset = CGPoint (x: contentOffset.x, y: value) - } - } -} - - - // MARK: - UILabel private var UILabelAttributedStringArray: UInt8 = 0 @@ -669,11 +665,11 @@ extension UILabel { if let att = attributedStrings?[index] { let newAtt = NSMutableAttributedString (string: newText) - att.enumerateAttributesInRange(NSMakeRange(0, countElements(att.string)-1), + att.enumerateAttributesInRange(NSMakeRange(0, count(att.string)-1), options: NSAttributedStringEnumerationOptions.LongestEffectiveRangeNotRequired, usingBlock: { (attribute, range, stop) -> Void in for (key, value) in attribute { - newAtt.addAttribute(key as String, value: value, range: range) + newAtt.addAttribute(key as! String, value: value, range: range) } } ) @@ -907,10 +903,10 @@ extension NSAttributedString { func addAtt (attribute: [NSString: NSObject]) -> NSAttributedString { let mutable = NSMutableAttributedString (attributedString: self) - let count = countElements(string) + let c = count(string) for (key, value) in attribute { - mutable.addAttribute(key, value: value, range: NSMakeRange(0, count)) + mutable.addAttribute(key as! String, value: value, range: NSMakeRange(0, c)) } return mutable @@ -928,7 +924,7 @@ extension NSAttributedString { font: UIFont, style: NSAttributedStringStyle = .plain) { - var atts = [NSFontAttributeName: font, NSForegroundColorAttributeName: color] + var atts = [NSFontAttributeName as NSString: font, NSForegroundColorAttributeName as NSString: color] atts += style.attribute() self.init (string: text, attributes: atts) @@ -962,43 +958,43 @@ extension String { // MARK: - UIFont +enum FontType: String { + case Regular = "Regular" + case Bold = "Bold" + case DemiBold = "DemiBold" + case Light = "Light" + case UltraLight = "UltraLight" + case Italic = "Italic" + case Thin = "Thin" + case Book = "Book" + case Roman = "Roman" + case Medium = "Medium" + case MediumItalic = "MediumItalic" + case CondensedMedium = "CondensedMedium" + case CondensedExtraBold = "CondensedExtraBold" + case SemiBold = "SemiBold" + case BoldItalic = "BoldItalic" + case Heavy = "Heavy" +} + +enum FontName: String { + case HelveticaNeue = "HelveticaNeue" + case Helvetica = "Helvetica" + case Futura = "Futura" + case Menlo = "Menlo" + case Avenir = "Avenir" + case AvenirNext = "AvenirNext" + case Didot = "Didot" + case AmericanTypewriter = "AmericanTypewriter" + case Baskerville = "Baskerville" + case Geneva = "Geneva" + case GillSans = "GillSans" + case SanFranciscoDisplay = "SanFranciscoDisplay" + case Seravek = "Seravek" +} + extension UIFont { - enum FontType: String { - case Regular = "Regular" - case Bold = "Bold" - case DemiBold = "DemiBold" - case Light = "Light" - case UltraLight = "UltraLight" - case Italic = "Italic" - case Thin = "Thin" - case Book = "Book" - case Roman = "Roman" - case Medium = "Medium" - case MediumItalic = "MediumItalic" - case CondensedMedium = "CondensedMedium" - case CondensedExtraBold = "CondensedExtraBold" - case SemiBold = "SemiBold" - case BoldItalic = "BoldItalic" - case Heavy = "Heavy" - } - - enum FontName: String { - case HelveticaNeue = "HelveticaNeue" - case Helvetica = "Helvetica" - case Futura = "Futura" - case Menlo = "Menlo" - case Avenir = "Avenir" - case AvenirNext = "AvenirNext" - case Didot = "Didot" - case AmericanTypewriter = "AmericanTypewriter" - case Baskerville = "Baskerville" - case Geneva = "Geneva" - case GillSans = "GillSans" - case SanFranciscoDisplay = "SanFranciscoDisplay" - case Seravek = "Seravek" - } - class func PrintFontFamily (font: FontName) { let arr = UIFont.fontNamesForFamilyName(font.rawValue) for name in arr { @@ -1022,15 +1018,15 @@ extension UIFont { class func AvenirNext ( type: FontType, size: CGFloat) -> UIFont { - return UIFont.Font(UIFont.FontName.AvenirNext, type: type, size: size) + return UIFont.Font(.AvenirNext, type: type, size: size) } class func AvenirNextDemiBold (size: CGFloat) -> UIFont { - return AvenirNext(UIFont.FontType.DemiBold, size: size) + return AvenirNext(.DemiBold, size: size) } class func AvenirNextRegular (size: CGFloat) -> UIFont { - return AvenirNext(UIFont.FontType.Regular, size: size) + return AvenirNext(.Regular, size: size) } } @@ -1069,7 +1065,7 @@ extension UIImageView { image: UIImage) { self.init (frame: CGRect (x: x, y: y, width: image.aspectWidthForHeight(height), height: height), image: image) } - + func imageWithUrl (url: String) { imageRequest(url, { (image) -> Void in @@ -1088,8 +1084,8 @@ extension UIImageView { }) } - func imageWithUrl (url: String, placeholder: String) { - self.image = UIImage (named: placeholder) + func imageWithUrl (url: String, placeholderNamed: String) { + self.image = UIImage (named: placeholderNamed) imageRequest(url, { (image) -> Void in if let img = image { self.image = image @@ -1209,7 +1205,7 @@ extension UIColor { var hexValue: CUnsignedLongLong = 0 if scanner.scanHexLongLong(&hexValue) { - switch (countElements(hex)) { + switch (count(hex)) { case 3: red = CGFloat((hexValue & 0xF00) >> 8) / 15.0 green = CGFloat((hexValue & 0x0F0) >> 4) / 15.0 @@ -1241,152 +1237,64 @@ extension UIColor { -// MARK: - Array +// MARK - UIScreen -extension Array { - mutating func removeObject (object: U) { - var index: Int? - for (idx, objectToCompare) in enumerate(self) { - if let to = objectToCompare as? U { - if object == to { - index = idx - } - } - } - - if(index != nil) { - self.removeAtIndex(index!) +extension UIScreen { + + class var Orientation: UIInterfaceOrientation { + get { + return UIApplication.sharedApplication().statusBarOrientation } } -} - - - -// MARK: - Dictionary - -func += (inout left: Dictionary, - right: Dictionary) { - for (k, v) in right { - left.updateValue(v, forKey: k) - } -} - - - -// MARK: - Dispatch - -func delay ( - seconds: Double, - queue: dispatch_queue_t = dispatch_get_main_queue(), - after: ()->()) { - - let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))) - dispatch_after(time, queue, after) -} - - - -// MARK: - DownloadTask - -func urlRequest ( - url: String, - success: (NSData?)->Void, - error: ((NSError)->Void)? = nil) { - NSURLConnection.sendAsynchronousRequest( - NSURLRequest (URL: NSURL (string: url)!), - queue: NSOperationQueue.mainQueue(), - completionHandler: { response, data, err in - if let e = err { - error? (e) + + class var ScreenWidth: CGFloat { + get { + if UIInterfaceOrientationIsPortrait(Orientation) { + return UIScreen.mainScreen().bounds.size.width } else { - success (data) + return UIScreen.mainScreen().bounds.size.height } - }) -} - -func imageRequest ( - url: String, - success: (UIImage?)->Void) { - - urlRequest(url) {data in - if let d = data { - success (UIImage (data: d)) } } -} - -func jsonRequest ( - url: String, - success: (AnyObject?->Void), - error: ((NSError)->Void)?) { - urlRequest( - url, - { (data)->Void in - let json: AnyObject? = dataToJsonDict(data) - success (json) - }, - { (err)->Void in - if let e = error { - e (err) + + class var ScreenHeight: CGFloat { + get { + if UIInterfaceOrientationIsPortrait(Orientation) { + return UIScreen.mainScreen().bounds.size.height + } else { + return UIScreen.mainScreen().bounds.size.width } - }) -} - -func dataToJsonDict (data: NSData?) -> AnyObject? { - - if let d = data { - var error: NSError? - let json: AnyObject? = NSJSONSerialization.JSONObjectWithData( - d, - options: NSJSONReadingOptions.AllowFragments, - error: &error) - - if let e = error { - return nil - } else { - return json } - } else { - return nil + } + + class var StatusBarHeight: CGFloat { + get { + return UIApplication.sharedApplication().statusBarFrame.height + } } } -// MARK - UIScreen - -var Orientation: UIInterfaceOrientation { - get { - return UIApplication.sharedApplication().statusBarOrientation - } -} +// MARK: - Array -var ScreenWidth: CGFloat { - get { - if UIInterfaceOrientationIsPortrait(Orientation) { - return UIScreen.mainScreen().bounds.size.width - } else { - return UIScreen.mainScreen().bounds.size.height +extension Array { + mutating func removeObject (object: U) { + var index: Int? + for (idx, objectToCompare) in enumerate(self) { + if let to = objectToCompare as? U { + if object == to { + index = idx + } + } } - } -} - -var ScreenHeight: CGFloat { - get { - if UIInterfaceOrientationIsPortrait(Orientation) { - return UIScreen.mainScreen().bounds.size.height - } else { - return UIScreen.mainScreen().bounds.size.width + + if(index != nil) { + self.removeAtIndex(index!) } } } -var StatusBarHeight: CGFloat { - get { - return UIApplication.sharedApplication().statusBarFrame.height - } -} - // MARK: - CGSize @@ -1470,7 +1378,7 @@ func clamp ( value: CGFloat, minimum: CGFloat, maximum: CGFloat) -> CGFloat { - return min (maximum, max(value, minimum)) + return min (maximum, max(value, minimum)) } @@ -1481,6 +1389,7 @@ func aspectHeightForTargetAspectWidth ( return (targetAspectWidth * currentHeight) / currentWidth } + func aspectWidthForTargetAspectHeight ( currentHeight: CGFloat, currentWidth: CGFloat, @@ -1490,6 +1399,96 @@ func aspectWidthForTargetAspectHeight ( +// MARK: - Dictionary + +func += (inout left: Dictionary, + right: Dictionary) { + for (k, v) in right { + left.updateValue(v, forKey: k) + } +} + + + +// MARK: - Dispatch + +func delay ( + seconds: Double, + queue: dispatch_queue_t = dispatch_get_main_queue(), + after: ()->()) { + + let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))) + dispatch_after(time, queue, after) +} + + + +// MARK: - DownloadTask + +func urlRequest ( + url: String, + success: (NSData?)->Void, + error: ((NSError)->Void)? = nil) { + NSURLConnection.sendAsynchronousRequest( + NSURLRequest (URL: NSURL (string: url)!), + queue: NSOperationQueue.mainQueue(), + completionHandler: { response, data, err in + if let e = err { + error? (e) + } else { + success (data) + } + }) +} + +func imageRequest ( + url: String, + success: (UIImage?)->Void) { + urlRequest(url, { (data) -> Void in + if let d = data { + success (UIImage (data: d)) + } + }) +} + +func jsonRequest ( + url: String, + success: (AnyObject?->Void), + error: ((NSError)->Void)?) { + urlRequest( + url, + { (data)->Void in + let json: AnyObject? = dataToJsonDict(data) + success (json) + }, + error: { (err)->Void in + if let e = error { + e (err) + } + }) +} + +func dataToJsonDict (data: NSData?) -> AnyObject? { + + if let d = data { + var error: NSError? + let json: AnyObject? = NSJSONSerialization.JSONObjectWithData( + d, + options: NSJSONReadingOptions.AllowFragments, + error: &error) + + if let e = error { + return nil + } else { + return json + } + } else { + return nil + } +} + + + // MARK: - UIAlertController func alert ( @@ -1557,9 +1556,6 @@ func barButtonItem ( } -// MARK: - Block Classes - - // MARK: - BlockButton @@ -1634,6 +1630,7 @@ class BlockWebView: UIWebView, UIWebViewDelegate { return true } } + } @@ -1759,138 +1756,3 @@ class BlockLongPress: UILongPressGestureRecognizer { longPressAction? (longPress) } } - - - -// MARK: BlockBadge - -class BlockBadge: UILabel { - - var attachedView: UIView! - - override var text: String? { - didSet { - sizeToFit() - h = font.pointSize+5 - w += 10 - - center = CGPoint (x: attachedView.right, y: attachedView.top) - } - } - - init (color: UIColor, font: UIFont) { - super.init(frame: CGRect(x: 0, y: 0, width: font.pointSize+5, height: font.pointSize+5)) - - self.backgroundColor = color - self.font = font - self.textAlignment = .Center - setCornerRadius(h/2) - } - - required init(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } -} - - - -// MARK: BlockPicker - -class BlockPicker: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate { - - var items: [String]? - var didPick: ((Int)->Void)? - - init (title: String, items: [String], didPick: (index: Int) -> Void) { - super.init() - self.items = items - self.didPick = didPick - - self.delegate = self - self.dataSource = self - } - - required init(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - - // MARK: UIPickerViewDataSource - - func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { - return 1 - } - - func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { - return items!.count - } - - - // MARK: UIPickerViewDelegate - - func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { - didPick? (row) - } - -} - - - -// MARK: DequeuableScrollView - -class DequeuableScrollView: UIScrollView { - - private var reusableViews: [UIView] = [] - private var visibleRect: CGRect! - - - override init (frame: CGRect) { - super.init(frame: frame) - } - - required init (coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - - override var contentOffset: CGPoint{ - didSet { - visibleRect = CGRect(origin: contentOffset, size: frame.size) - updateReusableViews() - } - } - - override func addSubview(view: UIView) { - super.addSubview(view) - reusableViews.append(view) - updateReusableViews() - } - - func updateReusableViews () { - for v in reusableViews { - if CGRectIntersectsRect(v.frame, visibleRect) { - if let s = v.superview { - if s == self { - continue - } else { - addSubview(v) - } - } else { - addSubview(v) - } - } else { - if let s = v.superview { - if s == self { - v.removeFromSuperview() - } else { - continue - } - } else { - continue - } - } - } - } -} - - diff --git a/CEMKit-Swift/ViewController.swift b/CEMKit-Swift/ViewController.swift index ca8b1c0..d00e595 100644 --- a/CEMKit-Swift/ViewController.swift +++ b/CEMKit-Swift/ViewController.swift @@ -12,7 +12,11 @@ class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - + cemkitDemo() + } + + + func cemkitDemo () { let att = NSAttributedString.withAttributedStrings({ att in att.appendAttributedString (NSAttributedString( text: "asd", @@ -30,7 +34,7 @@ class ViewController: UIViewController { text: "\nasd", color: UIColor.blackColor(), font: UIFont.Font(.AvenirNext, - type: UIFont.FontType.DemiBold, + type: .DemiBold, size: 15), style: .underline(.StyleSingle, UIColor.blueColor()))) }) @@ -56,7 +60,7 @@ class ViewController: UIViewController { let c = UILabel ( x: l.right, - y: StatusBarHeight, + y: UIScreen.StatusBarHeight, width: 150, text: "asdjndajsndajksdnkjanj\njewfwj\njfnewkfn", textColor: UIColor.blackColor(), @@ -95,7 +99,7 @@ class ViewController: UIViewController { }, { error in println("error" + error.description) - }) + }) view.addSubview(sheeter) } From 2aeb1b78a9314c8a38a920145756b7532e82024e Mon Sep 17 00:00:00 2001 From: Cem Olcay Date: Wed, 25 Feb 2015 15:04:44 +0200 Subject: [PATCH 2/5] nsdate extension readme updated --- .../UserInterfaceState.xcuserstate | Bin 80773 -> 81125 bytes .../WorkspaceSettings.xcsettings | 10 ++++++++++ CEMKit-Swift/CEMKit.swift | 15 +++++++++++++++ README.md | 14 ++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/WorkspaceSettings.xcsettings diff --git a/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate b/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate index 0950659e28d0ac9886f41c48f1ee5869aa966445..12dfae8d030bda6c925b8ed4ec0dd2c7dc7c362e 100644 GIT binary patch delta 13463 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 Z6Y8Upb@iXLul?_-d+q-}UPVHa{{xe3E}Z}X delta 13298 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 S|0#L(Uq5apfBR2FpZh;5n25mu diff --git a/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/WorkspaceSettings.xcsettings b/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..659c876 --- /dev/null +++ b/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/CEMKit-Swift/CEMKit.swift b/CEMKit-Swift/CEMKit.swift index 9e5e699..00dbc9e 100644 --- a/CEMKit-Swift/CEMKit.swift +++ b/CEMKit-Swift/CEMKit.swift @@ -1297,6 +1297,21 @@ extension Array { +// MARK: - NSDate + +extension NSDate { + + func toString (format: String) -> String { + let formatter = NSDateFormatter () + formatter.dateFormat = format + + return formatter.stringFromDate(self) + } + +} + + + // MARK: - CGSize func + (left: CGSize, right: CGSize) -> CGSize { diff --git a/README.md b/README.md index e8550e3..bfdd591 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ UIKit & Foundation toolbelt for quick prototyping and rapid development. * [UIImageView](#UIImageView) * [UIColor](#UIColor) * [UIImage](#UIImage) +* [NSDate](#NSDate) * [Array](#Array) * [Dictionary](#Dictionary) * [Dispatch](#Dispatch) @@ -939,6 +940,19 @@ Resize image based on its height (auto calculates width and keeps aspect ratio) func aspectResizeWithHeight (height: CGFloat) -> UIImage ``` +### NSDate + +##### Easy convert to string with format + +``` swift + func toString (format: String) -> String { + let formatter = NSDateFormatter () + formatter.dateFormat = format + + return formatter.stringFromDate(self) + } +``` + ### Array ##### Remove Object From cc87630429635b5956ae97007da7245479d820d9 Mon Sep 17 00:00:00 2001 From: Cem Olcay Date: Wed, 4 Mar 2015 13:31:41 +0200 Subject: [PATCH 3/5] xcode state --- CEMKit-Swift.podspec | 6 +++--- .../UserInterfaceState.xcuserstate | Bin 81125 -> 68829 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CEMKit-Swift.podspec b/CEMKit-Swift.podspec index 828b22b..1a66240 100644 --- a/CEMKit-Swift.podspec +++ b/CEMKit-Swift.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "CEMKit-Swift" - s.version = "0.1.4" + s.version = "0.1.5" s.summary = "UIKit toolset for quick prototyping and rapid development" s.description = <<-DESC @@ -64,7 +64,7 @@ Pod::Spec.new do |s| s.platform = :ios, "8.0" # When using multiple platforms - # s.ios.deployment_target = "5.0" + s.ios.deployment_target = "8.0" # s.osx.deployment_target = "10.7" @@ -74,7 +74,7 @@ Pod::Spec.new do |s| # Supports git, hg, bzr, svn and HTTP. # - s.source = { :git => "https://github.com/cemolcay/CEMKit-Swift.git", :tag => "v0.1.4" } + s.source = { :git => "https://github.com/cemolcay/CEMKit-Swift.git", :tag => "v0.1.5" } # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # diff --git a/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate b/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate index 12dfae8d030bda6c925b8ed4ec0dd2c7dc7c362e..e13720622ff54c3637bc28f91476ba87bcafe2f3 100644 GIT binary patch delta 8398 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 Uu0N$HRBE@Rg?Gz$-<|9K2dlJ)a{vGU delta 12720 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 F{{!U=G!Os) From 8bbe23d5c9d2228966e33e05b38ddb83ae4dc679 Mon Sep 17 00:00:00 2001 From: Cem Olcay Date: Wed, 4 Mar 2015 13:35:29 +0200 Subject: [PATCH 4/5] clean --- CEMKit-Swift/CEMKit.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CEMKit-Swift/CEMKit.swift b/CEMKit-Swift/CEMKit.swift index 00dbc9e..4e1fe24 100644 --- a/CEMKit-Swift/CEMKit.swift +++ b/CEMKit-Swift/CEMKit.swift @@ -26,7 +26,8 @@ extension UIView { // MARK: Custom Initilizer - convenience init (x: CGFloat, + convenience init ( + x: CGFloat, y: CGFloat, w: CGFloat, h: CGFloat) { @@ -644,7 +645,8 @@ extension UILabel { - func updateAttributedStringAtIndex (index: Int, + func updateAttributedStringAtIndex ( + index: Int, attributedString: NSAttributedString) { if let att = attributedStrings?[index] { @@ -660,7 +662,8 @@ extension UILabel { } } - func updateAttributedStringAtIndex (index: Int, + func updateAttributedStringAtIndex ( + index: Int, newText: String) { if let att = attributedStrings?[index] { let newAtt = NSMutableAttributedString (string: newText) From 66a469ed68d5cfa2975c939d11e3e99e5ddf7f46 Mon Sep 17 00:00:00 2001 From: Cem Olcay Date: Wed, 4 Mar 2015 13:39:56 +0200 Subject: [PATCH 5/5] xc --- .../UserInterfaceState.xcuserstate | Bin 68829 -> 59179 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate b/CEMKit-Swift.xcodeproj/project.xcworkspace/xcuserdata/cem.xcuserdatad/UserInterfaceState.xcuserstate index e13720622ff54c3637bc28f91476ba87bcafe2f3..4765ba59c42265d27db2aed946716553e12c7743 100644 GIT binary patch delta 4974 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 b4rzz7Lx+3!5D4#A@{srI`!^AX>uCE=+N>oK delta 5031 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 F{!i3ZPK*Em