Created
July 25, 2016 07:31
-
-
Save artemkrachulov/f67653b98dfc866c1528290a9e808978 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// CGRect+Geometry.swift | |
// | |
// Created by Artem Krachulov. | |
// Copyright (c) 2016 Artem Krachulov. All rights reserved. | |
// http://www.artemkrachulov.com | |
// | |
import UIKit | |
extension CGRect { | |
/// The center of rectangle (ignoring origin property) and is measured in points. Setting this property changes the values of the rectangle accordingly. | |
/// | |
/// Usage: | |
/// | |
/// let rect1 = CGRectMake(0, 0, 500, 400) | |
/// let rect1Center = rect1.center // {x 250 y 200} | |
/// | |
/// var rect2 = CGRectMake(0, 0, 200, 350) | |
/// | |
/// rect2.center = rect1Center // {x 150 y 25 w 200 h 350} | |
/// | |
public var center: CGPoint { | |
get { | |
return CGPointMake(width / 2, height / 2) | |
} | |
set(newValue) { | |
origin = CGPointMake(newValue.x - width / 2, newValue.y - height / 2) | |
} | |
} | |
/// Returns scaled and centered rectangle to fit size target rectangle. | |
/// | |
/// Usage: | |
/// | |
/// let rect1 = CGRectMake(0, 0, 500, 400) | |
/// var rect2 = CGRectMake(0, 0, 200, 350) | |
/// | |
/// let fitScaleRect = rect1.fitScaleRelativeTo(rect2) // {x 0 y 95 w 200 h 160} | |
/// | |
public func fitScaleRelativeTo(rect: CGRect) -> CGRect { | |
var newRect = self | |
newRect.size = newRect.size.increaseBy(multiplier: CGSizeGetFitScaleMultiplier(size, relativeToSize: rect.size)) | |
newRect.center = rect.center | |
return newRect | |
} | |
/// Returns scaled and centered rectangle to fill size target rectangle. | |
/// | |
/// Usage: | |
/// | |
/// let rect1 = CGRectMake(0, 0, 500, 400) | |
/// var rect2 = CGRectMake(0, 0, 200, 350) | |
/// | |
/// let fillScaleRect = rect1.fillScaleRelativeTo(rect2) // {x -118.75 y 0 w 437.5 h 350} | |
/// | |
public func fillScaleRelativeTo(rect: CGRect) -> CGRect { | |
var newRect = self | |
newRect.size = newRect.size.increaseBy(multiplier: CGSizeGetFillScaleMultiplier(size, relativeToSize: rect.size)) | |
newRect.center = rect.center | |
return newRect | |
} | |
/// Return rectangle where frame increased by multiplier. | |
/// | |
/// Original method | |
/// | |
/// func increaseBy(multiplier multiplier: CGFloat) -> CGSize | |
public func increase(byMultiplier multiplier: CGFloat) -> CGRect { | |
return CGRectMake(origin.x*multiplier, origin.y*multiplier, size.width*multiplier, size.height*multiplier) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment