“请稍等” iOS8中的对话框 [英] "Please wait" dialog in iOS8
问题描述
我曾经在我的应用中长时间使用请稍候对话框。使用 UIActivityIndicatorView
并将其添加到 UIAlertView
是非常简单的事情。
I used to have a "Please wait" dialog in my app for long time. It was quite simple thing using UIActivityIndicatorView
and adding it to UIAlertView
.
然而,iOS8引入了 UIAlertController
。是否可以添加任何东西以产生类似的效果?有没有其他方法可以用iOS8做这样的事情?
However iOS8 introduced UIAlertController
. Is it possible to add anything to it to have similiar effect? Is there another way of doing such thing with iOS8?
我搜索了很多网站,但仍然不知道如何使用新的API。
I have searched a lot of sites and still have no idea how it can be done with the new API.
我很感激任何答案 - 链接到libs,教程等,这可能会有所帮助。
I would appreciate any answers - links to libs, tutorials etc., which could be helpful.
问候,
Mateusz
推荐答案
您可以使用以模态方式呈现的自定义UIViewController,而不是使用UIAlertController。以下是我在Swift 2.0中使用的内容:
Instead of using a UIAlertController, you can use a custom UIViewController that is presented modally. Here is what I use in Swift 2.0:
class ActivityViewController: UIViewController {
private let activityView = ActivityView()
init(message: String) {
super.init(nibName: nil, bundle: nil)
modalTransitionStyle = .CrossDissolve
modalPresentationStyle = .OverFullScreen
activityView.messageLabel.text = message
view = activityView
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
private class ActivityView: UIView {
let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
let boundingBoxView = UIView(frame: CGRectZero)
let messageLabel = UILabel(frame: CGRectZero)
init() {
super.init(frame: CGRectZero)
backgroundColor = UIColor(white: 0.0, alpha: 0.5)
boundingBoxView.backgroundColor = UIColor(white: 0.0, alpha: 0.5)
boundingBoxView.layer.cornerRadius = 12.0
activityIndicatorView.startAnimating()
messageLabel.font = UIFont.boldSystemFontOfSize(UIFont.labelFontSize())
messageLabel.textColor = UIColor.whiteColor()
messageLabel.textAlignment = .Center
messageLabel.shadowColor = UIColor.blackColor()
messageLabel.shadowOffset = CGSizeMake(0.0, 1.0)
messageLabel.numberOfLines = 0
addSubview(boundingBoxView)
addSubview(activityIndicatorView)
addSubview(messageLabel)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
boundingBoxView.frame.size.width = 160.0
boundingBoxView.frame.size.height = 160.0
boundingBoxView.frame.origin.x = ceil((bounds.width / 2.0) - (boundingBoxView.frame.width / 2.0))
boundingBoxView.frame.origin.y = ceil((bounds.height / 2.0) - (boundingBoxView.frame.height / 2.0))
activityIndicatorView.frame.origin.x = ceil((bounds.width / 2.0) - (activityIndicatorView.frame.width / 2.0))
activityIndicatorView.frame.origin.y = ceil((bounds.height / 2.0) - (activityIndicatorView.frame.height / 2.0))
let messageLabelSize = messageLabel.sizeThatFits(CGSizeMake(160.0 - 20.0 * 2.0, CGFloat.max))
messageLabel.frame.size.width = messageLabelSize.width
messageLabel.frame.size.height = messageLabelSize.height
messageLabel.frame.origin.x = ceil((bounds.width / 2.0) - (messageLabel.frame.width / 2.0))
messageLabel.frame.origin.y = ceil(activityIndicatorView.frame.origin.y + activityIndicatorView.frame.size.height + ((boundingBoxView.frame.height - activityIndicatorView.frame.height) / 4.0) - (messageLabel.frame.height / 2.0))
}
}
你这样使用它:
let activitiyViewController = ActivityViewController(message: "Loading...")
presentViewController(activitiyViewController, animated: true, completion: nil)
它看起来像这样:
请参阅此答案一个示例实现,使用 UIViewControllerAnimatedTransitioning
重新创建 UIAlertController
动画。
See this answer for a sample implementation that recreates the UIAlertController
animation using UIViewControllerAnimatedTransitioning
.
这篇关于“请稍等” iOS8中的对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!