swift로 hud 만드는 step1
15403 단어 Swift
지금 만들고 있어요.
https://github.com/pixel-ink/PIhud
소스가 들어있어요.
배경에서 그림 배열하기
이렇게 그림을 배열합니다.
갖고 싶어요.
UIImage가 아닌 UIColor를 사용합니다.
예제view.backgroundColor = UIColor(patternImage: UIImage(named: "pattern.png")! )
Groupe Table View Background Color에 무늬가 있는 것은 놀라운 구조입니다.
CGRect 제작 시 쓰기 어려워요
이미지를 중심에 두려는 경우 UIViewContentModeCenter를 사용해야 한다고 생각하지만 CoreGraphics를 사용할 때는 스스로 계산해야 합니다.
CenterCGRectMake((container.frame.size.width - image.size.width) / 2, (container.frame.size.width.height - image.size.height) / 2, image.size.width, image.size.height)
좀 길어서 쓰기 힘들다고 생각해서 압축해서 쓸 수 있도록 extention을 해봤어요.
extentionprivate extension UIView {
var size: CGSize { return self.frame.size }
var x: CGFloat { return self.frame.origin.x }
var y: CGFloat { return self.frame.origin.y }
var w: CGFloat { return self.frame.size.width }
var h: CGFloat { return self.frame.size.height }
}
private extension CGRect {
var x: CGFloat { return self.origin.x }
var y: CGFloat { return self.origin.y }
var w: CGFloat { return self.size.width }
var h: CGFloat { return self.size.height }
}
private extension CGSize {
var w: CGFloat { return self.width }
var h: CGFloat { return self.height }
}
왠지 억지스럽지만 이걸로 하면 짧게 쓸 수 있어요.
CenterCGRectMake((container.w - image.w) / 2, (container.h - image.h) / 2, image.w, image.h)
aspectFit 및 ascpectFill을 사용하려면 함수를 먼저 사용합니다.
ContentModeclass func center(aspect:CGSize, bound:CGSize) -> CGRect {
let x = (bound.w - aspect.w) / 2
let y = (bound.h - aspect.h) / 2
return CGRectMake(x, y, aspect.w, aspect.h)
}
class func aspectFit(aspect:CGSize, bound:CGSize) -> CGRect {
let scale = min(bound.w / aspect.w, bound.h / aspect.h)
let size = CGSizeMake(aspect.w * scale, aspect.h * scale)
return center(size, bound:bound)
}
class func aspectFill(aspect:CGSize, bound:CGSize) -> CGRect {
let w = bound.w / aspect.w
let h = bound.h / aspect.h
var out = bound
if( h > w ){
out.width = bound.h / aspect.h * aspect.w
}else if( w > h ){
out.height = bound.w / aspect.w * aspect.h
}
return center(out, bound: bound)
}
설정치를 사용하시는 분들이 변경을 해주셨으면 좋겠습니다.
예를 들어 변수 변경speed의 상황을 고려한다.
varclass Hud {
var speed = 1.0
}
클래스를 여러 번 만들 때 마지막 설정 값을 기억하려면 선택하십시오
비이실성이라면 User Defaults에 저장하고 휘발성이 좋으면singleton Class에 저장하고 싶습니다.
이번에는 후자를 사용했다.
Singletonclass HudConfig {
var speed = 1.0
class var shared: HudConfig {
struct Static {
static let instance: HudConfig = HudConfig()
}
return Static.instance
}
}
//HudがHudConfig.shared.speedを読みにいく
진도
view.backgroundColor = UIColor(patternImage: UIImage(named: "pattern.png")! )
이미지를 중심에 두려는 경우 UIViewContentModeCenter를 사용해야 한다고 생각하지만 CoreGraphics를 사용할 때는 스스로 계산해야 합니다.
Center
CGRectMake((container.frame.size.width - image.size.width) / 2, (container.frame.size.width.height - image.size.height) / 2, image.size.width, image.size.height)
좀 길어서 쓰기 힘들다고 생각해서 압축해서 쓸 수 있도록 extention을 해봤어요.extention
private extension UIView {
var size: CGSize { return self.frame.size }
var x: CGFloat { return self.frame.origin.x }
var y: CGFloat { return self.frame.origin.y }
var w: CGFloat { return self.frame.size.width }
var h: CGFloat { return self.frame.size.height }
}
private extension CGRect {
var x: CGFloat { return self.origin.x }
var y: CGFloat { return self.origin.y }
var w: CGFloat { return self.size.width }
var h: CGFloat { return self.size.height }
}
private extension CGSize {
var w: CGFloat { return self.width }
var h: CGFloat { return self.height }
}
왠지 억지스럽지만 이걸로 하면 짧게 쓸 수 있어요.Center
CGRectMake((container.w - image.w) / 2, (container.h - image.h) / 2, image.w, image.h)
aspectFit 및 ascpectFill을 사용하려면 함수를 먼저 사용합니다.ContentMode
class func center(aspect:CGSize, bound:CGSize) -> CGRect {
let x = (bound.w - aspect.w) / 2
let y = (bound.h - aspect.h) / 2
return CGRectMake(x, y, aspect.w, aspect.h)
}
class func aspectFit(aspect:CGSize, bound:CGSize) -> CGRect {
let scale = min(bound.w / aspect.w, bound.h / aspect.h)
let size = CGSizeMake(aspect.w * scale, aspect.h * scale)
return center(size, bound:bound)
}
class func aspectFill(aspect:CGSize, bound:CGSize) -> CGRect {
let w = bound.w / aspect.w
let h = bound.h / aspect.h
var out = bound
if( h > w ){
out.width = bound.h / aspect.h * aspect.w
}else if( w > h ){
out.height = bound.w / aspect.w * aspect.h
}
return center(out, bound: bound)
}
설정치를 사용하시는 분들이 변경을 해주셨으면 좋겠습니다.
예를 들어 변수 변경speed의 상황을 고려한다.
varclass Hud {
var speed = 1.0
}
클래스를 여러 번 만들 때 마지막 설정 값을 기억하려면 선택하십시오
비이실성이라면 User Defaults에 저장하고 휘발성이 좋으면singleton Class에 저장하고 싶습니다.
이번에는 후자를 사용했다.
Singletonclass HudConfig {
var speed = 1.0
class var shared: HudConfig {
struct Static {
static let instance: HudConfig = HudConfig()
}
return Static.instance
}
}
//HudがHudConfig.shared.speedを読みにいく
진도
class Hud {
var speed = 1.0
}
class HudConfig {
var speed = 1.0
class var shared: HudConfig {
struct Static {
static let instance: HudConfig = HudConfig()
}
return Static.instance
}
}
//HudがHudConfig.shared.speedを読みにいく
Reference
이 문제에 관하여(swift로 hud 만드는 step1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pixel-ink/items/05820d095319c2208b5a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)