class YXModal: NSObject {
/// 獲取單例
public static let `default` = YXModal.init()
private lazy var alertWindow: UIWindow = {
let newWindow = UIWindow.init()
newWindow.frame = UIScreen.main.bounds
newWindow.isHidden = true
newWindow.alpha = 1
newWindow.windowLevel = UIWindow.Level.alert - 10
newWindow.backgroundColor = UIColor.clear
return newWindow
}()
private override init() {
super.init()
}
enum AlertShowStyle {
case scale, top, bottom, none
}
private var showStyle = AlertShowStyle.scale
}
extension YXModal {
/// 展示彈框
///
/// - Parameters:
/// - alertView: 彈框
/// - maskViewColor: 遮罩顏色
/// - style: 彈出方式
/// - duration: 動畫時(shí)常
func showContentView(_ alertView: UIView,
maskViewColor: UIColor = UIColor.black.withAlphaComponent(0.7),
style: AlertShowStyle = AlertShowStyle.scale,
needTouchesClose: Bool = true,
duration: Double = 0.3) {
showStyle = style
for item in alertWindow.subviews {
item.removeFromSuperview()
}
let root = PHModalViewController.init()
root.needTouchesClose = needTouchesClose
alertWindow.rootViewController = root
alertWindow.rootViewController?.view.backgroundColor = maskViewColor
alertWindow.makeKeyAndVisible()
alertWindow.addSubview(alertView)
alertView.center = alertWindow.center
let startTransform: CGAffineTransform
let endTransform: CGAffineTransform
var satrtAlpha: CGFloat = 1.0
var endAlpha: CGFloat = 1.0
if style == .top {
startTransform = CGAffineTransform.init(translationX: 0, y: -(ScreenHeight))
endTransform = CGAffineTransform.identity
} else if style == .bottom {
startTransform = CGAffineTransform.init(translationX: 0, y: ScreenHeight)
endTransform = CGAffineTransform.identity
} else if style == .scale {
startTransform = CGAffineTransform.init(scaleX: 0, y: 0)
endTransform = CGAffineTransform.init(scaleX: 1, y: 1)
} else {
startTransform = CGAffineTransform.init(scaleX: 1, y: 1)
endTransform = CGAffineTransform.init(scaleX: 1, y: 1)
satrtAlpha = 0.0
endAlpha = 1.0
}
alertView.transform = startTransform
alertView.alpha = satrtAlpha
UIView.animate(withDuration: duration,
delay: 0,
usingSpringWithDamping: 0.9,
initialSpringVelocity: 0.5,
options: [],
animations: {
alertView.transform = endTransform
alertView.alpha = endAlpha
}, completion: { (_) in
})
}
/// 關(guān)閉
func hiden(_ result: (() -> Void)? = nil) {
let duration: Double
let endTransform: CGAffineTransform
if showStyle == .top {
duration = 0.5
endTransform = CGAffineTransform.init(translationX: 0, y: -(ScreenHeight))
} else if showStyle == .bottom {
duration = 0.5
endTransform = CGAffineTransform.init(translationX: 0, y: ScreenHeight)
} else {
duration = 0.2
endTransform = CGAffineTransform.init(scaleX: 0, y: 0)
}
UIView.animate(withDuration: duration,
delay: 0,
usingSpringWithDamping: 0.7,
initialSpringVelocity: 0.5,
options: [],
animations: {[weak self] in
self?.alertWindow.transform = endTransform
}, completion: { [weak self] (_) in
self?.cleanup()
result?()
})
}
private func cleanup() {
for item in alertWindow.subviews {
item.removeFromSuperview()
}
alertWindow.isHidden = true
alertWindow.transform = CGAffineTransform.identity
}
}
// MARK: - rootVC
fileprivate class PHModalViewController: UIViewController {
var needTouchesClose: Bool = true
override func loadView() {
view = UIView.init(frame: UIScreen.main.bounds)
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.clear
view.autoresizingMask = UIView.AutoresizingMask(rawValue: UIView.AutoresizingMask.flexibleWidth.rawValue |
UIView.AutoresizingMask.flexibleHeight.rawValue)
}
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if needTouchesClose {
YXModal.default.hiden()
}
}
deinit {
print("modal vc dealloc")
}
}
iOS 彈窗工具
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門历造,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甩十,“玉大人船庇,你說我怎么就攤上這事吭产。” “怎么了鸭轮?”我有些...
- 文/不壞的土叔 我叫張陵臣淤,是天一觀的道長。 經(jīng)常有香客問我窃爷,道長邑蒋,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任按厘,我火速辦了婚禮医吊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逮京。我一直安慰自己卿堂,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布懒棉。 她就那樣靜靜地躺著草描,像睡著了一般。 火紅的嫁衣襯著肌膚如雪策严。 梳的紋絲不亂的頭發(fā)上穗慕,一...
- 文/蒼蘭香墨 我猛地睜開眼狐肢,長吁一口氣:“原來是場噩夢啊……” “哼添吗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起份名,我...
- 序言:老撾萬榮一對情侶失蹤碟联,失蹤者是張志新(化名)和其女友劉穎妓美,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲤孵,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡壶栋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了普监。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贵试。...
- 正文 年R本政府宣布桑滩,位于F島的核電站,受9級特大地震影響允睹,放射性物質(zhì)發(fā)生泄漏运准。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一缭受、第九天 我趴在偏房一處隱蔽的房頂上張望胁澳。 院中可真熱鬧,春花似錦米者、人聲如沸韭畸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽陆盘。三九已至,卻和暖如春败明,著一層夾襖步出監(jiān)牢的瞬間隘马,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓讳嘱,卻偏偏與公主長得像幔嗦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子沥潭,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 超簡單實(shí)用的自定義選擇提示框庞钢,自定義彈窗,網(wǎng)絡(luò)檢測與提示,工具類因谎,之前項(xiàng)目寫的基括,分離出來,希望對大家有用财岔, 圖片都...
- IOS 打包上線利器鲁僚,AppStore中應(yīng)用版本檢測工具封裝,2.0后更好用喲裁厅!增加了強(qiáng)更邏輯和不同的UI彈窗(一...
- 所有工具已升級唠梨,請使用CC系列工具袋励,舊版已不現(xiàn)維護(hù),目前已無法使用 進(jìn)入 CC官網(wǎng) 前往 [ 官網(wǎng)下載] Cod...
- 所有工具已升級磺芭,請使用CC系列工具,舊版已不現(xiàn)維護(hù)醉箕,目前已無法使用 進(jìn)入 CC官網(wǎng) 前往 [ 官網(wǎng)下載] Cod...