Skip to content

Instantly share code, notes, and snippets.

@tgaul
Created June 3, 2014 03:47
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save tgaul/ced6690de5b12a2d43d6 to your computer and use it in GitHub Desktop.
Save tgaul/ced6690de5b12a2d43d6 to your computer and use it in GitHub Desktop.
// Source for the Accidental Tech Podcast (ATP) T-Shirt:
// http://www.marco.org/2014/04/29/atp-shirts
//
// By Troy Gaul, June 2, 2014.
//
// Based on Obj-C veresion by Marco Arment, April 28, 2014. MIT license.
// https://gist.github.com/marcoarment/2542cd28cb5df0aa97d8
import UIKit
class ATPLogoView: UIView {
override func drawRect(rectIgnored: CGRect)
{
let fontName = "MyriadPro-Semibold"
let title = NSLocalizedString("Accidental Tech Podcast", comment: "")
let initials = NSLocalizedString("ATP", comment: "") as NSString
let rect = CGRect(origin: CGPointZero, size: self.bounds.size)
let w = rect.size.width
let offsetY = w * -0.07
var ringRect = CGRectInset(rect, w * 0.08, w * 0.08)
ringRect.origin.y += offsetY
let ring = UIBezierPath(ovalInRect: ringRect)
ring.lineWidth = ceil(w * 0.012)
UIColor(white: 0.3, alpha: 1.0).setStroke()
ring.stroke()
var innerRingRect = CGRectInset(rect, w * 0.21, w * 0.21)
innerRingRect.origin.y += offsetY
let inner = UIBezierPath(ovalInRect: innerRingRect)
inner.lineWidth = ceil(w * 0.007)
UIColor(white: 0.7, alpha: 1.0).setStroke()
inner.stroke()
let pStyle = NSMutableParagraphStyle()
pStyle.alignment = .Center
let titleAttributes = [
NSFontAttributeName: UIFont(name: fontName, size: w * 0.068),
NSParagraphStyleAttributeName: pStyle,
NSForegroundColorAttributeName: UIColor.whiteColor(),
NSKernAttributeName: w * 0.0037
]
let t = title.uppercaseString as NSString
let titleRect = CGRect(x: 0, y: w * 0.91, width: w, height: w * 0.09)
let o = NSStringDrawingOptions.UsesLineFragmentOrigin
t.drawWithRect(titleRect, options: o, attributes: titleAttributes, context: nil)
let bs = CGSize(width: w * 0.44, height: w * 0.19)
var bOrigin = CGPoint(x: (w - bs.width) / 2.0, y: (w - bs.height) / 2.0)
bOrigin.y += offsetY
let b = CGRect(origin: bOrigin, size: bs)
let cX = CGRectGetMidX(b), cY = CGRectGetMidY(b)
var transform = CGAffineTransformMakeTranslation(cX, cY)
transform = CGAffineTransformRotate(transform, 0.5236)
transform = CGAffineTransformTranslate(transform, -cX, -cY)
CGContextConcatCTM(UIGraphicsGetCurrentContext(), transform)
UIColor(red: 0.12, green: 0.25, blue: 0.4, alpha: 1.0).setFill()
UIBezierPath(roundedRect: b, cornerRadius: bs.height * 0.15).fill()
let a = titleAttributes.mutableCopy() as NSMutableDictionary
a[NSFontAttributeName] = UIFont(name: fontName, size: bs.height * 0.84)
a[NSKernAttributeName] = bs.height * 0.04
let r = CGRectInset(b, 0, 0.17 * bs.height)
initials.drawWithRect(r, options: o, attributes: a, context: nil)
}
}
@tgaul
Copy link
Author

tgaul commented Jun 3, 2014

I wrote this by creating a starter project using the Xcode iOS Single View Application template with the Swift language. I then added a UIView to the storyboard, made it square (by setting up auto-layout as appropriate), and set its class to ATPLogoView. Finally, since this uses MyriadPro-Semibold which isn't on iOS, I found that file in Font Book, added it to the project, and created an entry in the Info.plist under UIAppFonts listing its filename.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment