 			}
 
 			finalizedText.addAttributes(finalAttributes, range: range)
+		}
+
+		if let textTransform = textTransform {
+			let transform: (String) -> String
+			switch textTransform {
+			case .Capitalize: transform = { $0.localizedCapitalizedString } // TODO this isn't 100% reliable when applying to segments instead of to the whole string
+			case .Lowercase:  transform = { $0.localizedLowercaseString }
+			case .Uppercase:  transform = { $0.localizedUppercaseString }
+			}
+
+			finalizedText.transformStringSegments(transform)
 		}
 
 		textStorage.setAttributedString(finalizedText)

		case Absolute(CGFloat)
		case Relative(CGFloat)
	}
	
	
	

	}


	public var textTransform: TextTransform? {
		didSet {
			guard textTransform != oldValue else {
				return
			}

			setNeedsUpdateFinalizedText()
		}
	}


	public override func tintColorDidChange() {
		super.tintColorDidChange()

