From 3c9fa78849b32e53fd407f546f51e8de5ca68973 Mon Sep 17 00:00:00 2001 From: Badarinath Venkatnarayansetty Date: Fri, 23 Aug 2019 11:15:19 -0700 Subject: [PATCH] Task/card part icon label (#164) * Implementation of cardpart icon label * Added readme for cardpartIcon Label * Updsted set up to handle corner radius aspect * Added ninding for icon adopted review comment --- .../Card Parts/CardPartIconLabel.swift | 177 ++++++++++++++++++ Example/CardParts.xcodeproj/project.pbxproj | 4 + .../CardPartIconLabelCardController.swift | 110 +++++++++++ Example/CardParts/MainViewController.swift | 3 +- README.md | 21 +++ images/cardPartIconLabel.png | Bin 0 -> 37787 bytes 6 files changed, 314 insertions(+), 1 deletion(-) create mode 100644 CardParts/src/Classes/Card Parts/CardPartIconLabel.swift create mode 100644 Example/CardParts/CardPartIconLabelCardController.swift create mode 100644 images/cardPartIconLabel.png diff --git a/CardParts/src/Classes/Card Parts/CardPartIconLabel.swift b/CardParts/src/Classes/Card Parts/CardPartIconLabel.swift new file mode 100644 index 00000000..f93501e7 --- /dev/null +++ b/CardParts/src/Classes/Card Parts/CardPartIconLabel.swift @@ -0,0 +1,177 @@ +// +// CardPartIconLabel.swift +// CardParts +// +// Created by Venkatnarayansetty, Badarinath on 8/20/19. +// + +import Foundation +import UIKit +import RxSwift +import RxCocoa + +public class CardPartIconLabel: UILabel, CardPartView { + + public enum HorizontalPosition { + case left + case right + } + + public enum VerticalPosition { + case top + case center + case bottom + } + + public var margins: UIEdgeInsets = CardParts.theme.cardPartMargins + + /// provides vertical and horizontal spacing + public var verticalPadding:CGFloat = 2.0 + public var horizontalPadding:CGFloat = 2.0 + public var padding:CGFloat = 10.0 + + public var iconView: UIImageView? { + didSet { + guard let image = iconView?.image else { return } + self.icon = image + } + } + + /// Horizontal and vertical position + public typealias Position = (horizontal: CardPartIconLabel.HorizontalPosition, vertical: CardPartIconLabel.VerticalPosition) + open var iconPosition: Position = (.left , .top) + + /// additional spacing between text and the image + public var iconPadding: CGFloat = 0 + + public var icon:UIImage? { + didSet { + if icon == nil { + iconView?.removeFromSuperview() + } + setNeedsDisplay() + } + } + + public var labelText: String? { + didSet { + guard let text = labelText else { return } + self.text = text + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + fileprivate func setup() { + self.clipsToBounds = true + } + + open override func drawText(in rect: CGRect) { + guard let text = text as NSString? else { return } + + guard let icon = icon else { + super.drawText(in: rect) + return + } + + //remove from view if it's present before adding it. + iconView?.removeFromSuperview() + iconView = UIImageView(image: icon) + + //calculate frame of the text based on content. + let size = text.boundingRect(with: CGSize(width: frame.width - icon.size.width - iconPadding, height: .greatestFiniteMagnitude), + options: NSStringDrawingOptions.usesLineFragmentOrigin, + attributes: [.font : font as Any ], + context: nil).size + + var newRect = CGRect.zero + guard let iconView = iconView else { return } + + /// calculate the icon y position + let iconYPosition = (frame.height - iconView.frame.height) / 2 + let height = frame.height + + // set the frame positions according to text alignment and icon horizontal positions. + switch iconPosition.horizontal { + case .left: + if textAlignment == .left { + iconView.frame = iconView.frame.offsetBy(dx: padding, dy: iconYPosition) + newRect = CGRect(x: iconView.frame.width + iconPadding + padding, y: 0, width: frame.width - (iconView.frame.width + iconPadding), height: height) + }else if textAlignment == .right { + iconView.frame = iconView.frame.offsetBy(dx: frame.width - size.width - iconPadding - iconView.frame.width - padding, dy: iconYPosition) + newRect = CGRect(x: frame.width - size.width - iconPadding - padding , y: 0, width: size.width + iconPadding, height: height) + }else if textAlignment == .center { + iconView.frame = iconView.frame.offsetBy(dx: (frame.width - size.width) / 2 - iconPadding - iconView.frame.width, dy: iconYPosition) + newRect = CGRect(x: (frame.width - size.width) / 2 , y: 0, width: size.width + iconPadding, height: height) + } + case .right: + if textAlignment == .left { + iconView.frame = iconView.frame.offsetBy(dx: size.width + iconPadding + padding, dy: iconYPosition) + newRect = CGRect(x: 10, y: 0, width: size.width, height: height) + }else if textAlignment == .right { + iconView.frame = iconView.frame.offsetBy(dx: frame.width - iconView.frame.width - padding , dy: iconYPosition) + newRect = CGRect(x: frame.width - size.width - iconView.frame.width - iconPadding - 2 * padding, y: 0, width: size.width + iconPadding, height: height) + }else if textAlignment == .center { + iconView.frame = iconView.frame.offsetBy(dx: frame.width / 2 + size.width / 2 + iconPadding, dy: iconYPosition) + newRect = CGRect(x: (frame.width - size.width) / 2, y: 0, width: size.width, height: height) + } + } + + // set the frame positions of the icon vertically i.e., top, bottom or center + switch iconPosition.vertical { + case .top: iconView.frame.origin.y = (frame.height - size.height) / 2 + + case .center: iconView.frame.origin.y = (frame.height - iconView.frame.height) / 2 + + case .bottom: iconView.frame.origin.y = frame.height - (frame.height - size.height) / 2 - iconView.frame.size.height + } + + addSubview(iconView) + super.drawText(in: newRect) + setup() + } + + /// returns new size with updated vertical and horizantal padding. + public override var intrinsicContentSize: CGSize { + let superSize = super.intrinsicContentSize + let newWidth = superSize.width + superSize.height + (2 * horizontalPadding) + let newHeight = superSize.height + (2 * verticalPadding) + let size = CGSize(width: newWidth, height: newHeight) + return size + } +} + +// MARK: - Reactive binding for label's text , vertical & horizontal padding. +extension Reactive where Base: CardPartIconLabel { + + public var labelText: Binder{ + return Binder(self.base) { (label, labelText) -> () in + label.text = labelText + } + } + + public var verticalPadding: Binder { + return Binder(self.base) { (label, verticalPadding) -> () in + label.verticalPadding = verticalPadding + } + } + + public var horizontalPadding: Binder { + return Binder(self.base) { (label, horizontalPadding) -> () in + label.horizontalPadding = horizontalPadding + } + } + + public var iconView: Binder { + return Binder(self.base) { (imageView, iconView) -> () in + imageView.iconView = iconView + } + } +} diff --git a/Example/CardParts.xcodeproj/project.pbxproj b/Example/CardParts.xcodeproj/project.pbxproj index ab0cd74e..8de89b26 100644 --- a/Example/CardParts.xcodeproj/project.pbxproj +++ b/Example/CardParts.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 1964FC2A3640A8318B06FAE2 /* Pods_CardParts_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 411FA9F08E0EF1AF5B1D8EA1 /* Pods_CardParts_Tests.framework */; }; 1B1E203D22F47A8700734EDA /* CardPartPillLabelCardController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B1E203C22F47A8700734EDA /* CardPartPillLabelCardController.swift */; }; 1B1E204022F4ADE900734EDA /* CardPartRoundedStackViewCardController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B1E203F22F4ADE900734EDA /* CardPartRoundedStackViewCardController.swift */; }; + 1B693BA1230DAE2900662382 /* CardPartIconLabelCardController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B693BA0230DAE2900662382 /* CardPartIconLabelCardController.swift */; }; 1BD1074022F22823000163D2 /* CardPartBorderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BD1073F22F22823000163D2 /* CardPartBorderViewController.swift */; }; 5570914320D18B07004D8E5A /* CardPartOrientedViewCardController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5570914220D18B07004D8E5A /* CardPartOrientedViewCardController.swift */; }; 55809E2620DABBF3008BE0D2 /* CardPartCenteredViewCardController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55809E2520DABBF3008BE0D2 /* CardPartCenteredViewCardController.swift */; }; @@ -60,6 +61,7 @@ /* Begin PBXFileReference section */ 1B1E203C22F47A8700734EDA /* CardPartPillLabelCardController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPartPillLabelCardController.swift; sourceTree = ""; }; 1B1E203F22F4ADE900734EDA /* CardPartRoundedStackViewCardController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPartRoundedStackViewCardController.swift; sourceTree = ""; }; + 1B693BA0230DAE2900662382 /* CardPartIconLabelCardController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPartIconLabelCardController.swift; sourceTree = ""; }; 1BD1073F22F22823000163D2 /* CardPartBorderViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPartBorderViewController.swift; sourceTree = ""; }; 2BA2B86E3C2946F91C18390D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 2C0391CB2C9A48987E449BE1 /* Pods-CardParts_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CardParts_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CardParts_Tests/Pods-CardParts_Tests.debug.xcconfig"; sourceTree = ""; }; @@ -237,6 +239,7 @@ 1BD1073F22F22823000163D2 /* CardPartBorderViewController.swift */, 1B1E203C22F47A8700734EDA /* CardPartPillLabelCardController.swift */, 1B1E203F22F4ADE900734EDA /* CardPartRoundedStackViewCardController.swift */, + 1B693BA0230DAE2900662382 /* CardPartIconLabelCardController.swift */, ); name = "Type of CardParts"; sourceTree = ""; @@ -494,6 +497,7 @@ 7051279F20B5E2ED00B8E635 /* CardPartTextFieldCardController.swift in Sources */, 70BB3BF420FF89A500F55D57 /* CardPartTitleDescriptionViewCardController.swift in Sources */, 1B1E204022F4ADE900734EDA /* CardPartRoundedStackViewCardController.swift in Sources */, + 1B693BA1230DAE2900662382 /* CardPartIconLabelCardController.swift in Sources */, 70F595D020B5C56200B6E688 /* CardPartTextViewCardController.swift in Sources */, 70F595D420B5C7B300B6E688 /* CardPartButtonViewCardController.swift in Sources */, 70F595D620B5C87300B6E688 /* CardPartTitleViewCardController.swift in Sources */, diff --git a/Example/CardParts/CardPartIconLabelCardController.swift b/Example/CardParts/CardPartIconLabelCardController.swift new file mode 100644 index 00000000..a7b85702 --- /dev/null +++ b/Example/CardParts/CardPartIconLabelCardController.swift @@ -0,0 +1,110 @@ +// +// CardPartIconLabelCardController.swift +// CardParts_Example +// +// Created by Venkatnarayansetty, Badarinath on 8/21/19. +// Copyright © 2019 CocoaPods. All rights reserved. +// + +import Foundation +import CardParts +import RxSwift +import RxCocoa + +class CardPartIconLabelCardController: CardPartsViewController { + + var viewModel = ReactiveCardPartIconViewModel() + + override func viewDidLoad() { + + let alignment: CardPartIconLabel.VerticalPosition = .center + + let stackView = CardPartStackView() + stackView.axis = .vertical + stackView.spacing = 10 + + for index in 0...5 { + + let iconLabel = CardPartIconLabel() + iconLabel.verticalPadding = 10 + iconLabel.horizontalPadding = 10 + iconLabel.backgroundColor = UIColor(red: 16.0 / 255.0, green: 128.0 / 255.0, blue: 0, alpha: 0.16) + iconLabel.font = UIFont.systemFont(ofSize: 12) + iconLabel.textColor = UIColor.black + iconLabel.numberOfLines = 0 + iconLabel.iconPadding = 5 + iconLabel.layer.cornerRadius = 8.0 + iconLabel.icon = UIImage(named: "themeIcon") + + switch index { + case 0: + iconLabel.text = "Card icon on left,text is left" + iconLabel.textAlignment = .left + iconLabel.iconPosition = ( .left, alignment ) + + case 1: + iconLabel.text = "Card icon on right,text is left" + iconLabel.textAlignment = .left + iconLabel.iconPosition = ( .right, alignment ) + + case 2: + iconLabel.text = "Card icon on left,text is right" + iconLabel.textAlignment = .right + iconLabel.iconPosition = (.left, alignment) + + case 3: + iconLabel.text = "Card icon on right,text is right" + iconLabel.textAlignment = .right + iconLabel.iconPosition = (.right, alignment) + + case 4: + iconLabel.text = "Card icon on left,text is center" + iconLabel.textAlignment = .center + iconLabel.iconPosition = (.left, alignment) + + case 5: + iconLabel.text = "Card icon on right,text is center" + iconLabel.textAlignment = .center + iconLabel.iconPosition = (.right, alignment) + + default: + break + } + + stackView.addArrangedSubview(iconLabel) + + if index == 1 { + viewModel.labelText.asObservable().bind(to: iconLabel.rx.labelText).disposed(by: bag) + viewModel.iconView.asObservable().bind(to: iconLabel.rx.iconView).disposed(by: bag) + invalidateLayout(onChanges: [viewModel.iconView]) + } + } + + setupCardParts([stackView]) + } +} + +class ReactiveCardPartIconViewModel { + + var labelText = BehaviorRelay(value: "Defaul Label") + var iconView = BehaviorRelay(value: UIImageView(image: UIImage(named: ""))) + + init() { + startTimer() + } + + func startTimer() { + iconView.accept( UIImageView(image: UIImage(named: "cardIcon"))) + Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.randomise), userInfo: nil, repeats: true) + } + + @objc func randomise() { + switch arc4random() % 1 { + case 0: + labelText.accept("CardParts is reactive based library") + default: + return + } + } + +} diff --git a/Example/CardParts/MainViewController.swift b/Example/CardParts/MainViewController.swift index 6969736d..405ba5d5 100644 --- a/Example/CardParts/MainViewController.swift +++ b/Example/CardParts/MainViewController.swift @@ -35,7 +35,8 @@ class MainViewController: CardsViewController { StateCardController(), // Demo states CardPartBorderViewController(), // Border Cards CardPartPillLabelCardController(), // Pill label - CardPartRoundedStackViewCardController() //Rounded Stackview + CardPartRoundedStackViewCardController(), //Rounded Stackview + CardPartIconLabelCardController() // Icon label ] loadCards(cards: cards) diff --git a/README.md b/README.md index 55dfc437..7ea39751 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ CardParts - made with ❤️ by Intuit: - [CardPartTitleView](#cardparttitleview) - [CardPartTitleDescriptionView](#cardparttitleview) - [CardPartPillLabel](#cardpartpilllabel) + - [CardPartIconLabel](#cardparticonlabel) - [CardPartSeparatorView](#cardpartseparatorview) - [CardPartVerticalSeparatorView](#cardpartverticalseparatorview) - [CardPartTableView](#cardparttableview) @@ -507,6 +508,26 @@ var horizontalPadding:CGFloat See the example app for a working example. +#### `CardPartIconLabel` + +CardPartIconLabel provides the capability to add images in eithet directions supporting left , right and center text alignments. + +```swift + let iconLabel = CardPartIconLabel() + iconLabel.verticalPadding = 10 + iconLabel.horizontalPadding = 10 + iconLabel.backgroundColor = UIColor.blue + iconLabel.font = UIFont.systemFont(ofSize: 12) + iconLabel.textColor = UIColor.black + iconLabel.numberOfLines = 0 + iconLabel.iconPadding = 5 + iconLabel.icon = UIImage(named: "cardIcon") +``` + +

+cardPartIconLabel +

+ #### `CardPartSeparatorView` CardPartSeparatorView displays a separator line. There are no reactive properties define for CardPartSeparatorView. diff --git a/images/cardPartIconLabel.png b/images/cardPartIconLabel.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9dc24162dd1d5b42cdc6e6f4afbe8a552d8ac9 GIT binary patch literal 37787 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

!S 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 literal 0 HcmV?d00001