Я работаю над приложением и хочу, чтобы мое окно прокрутки блокировалось на месте во время загрузки данных. В настоящее время, когда пользователь обновляет представление прокрутки, он сразу же возвращается на место. Как я могу настроить свой код так, чтобы представление прокрутки блокировалось до тех пор, пока код внутри него не будет полностью выполнен? Вот мой код:
@IBOutlet weak var scrollView: UIScrollView!
var refreshControl: UIRefreshControl!
@objc func refreshData(sender: UIRefreshControl){
getItems()
sender.endRefreshing()
}
вот моя функция getItems ():
func getItems() {
//Hit the web service Url
let serviceUrl = "omitted"
let url = URL(string: serviceUrl)
//Download the json data
if let url = url{
//Create a URL Session
let session = URLSession(configuration: .default)
let request = URLRequest(url: url, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 15.0)
let task = session.dataTask(with: request, completionHandler: {(data, response, error) in
if error == nil {
//Succeeded
//Call the parse json function on the data
self.parseJson(data!)
}
else {
print("error occured in getItems")
}
})
// Start the task
task.resume()
}
}
//Parse it out into DataModel structs
func parseJson(_ data:Data){
//parse the data into DataModel structs
do{
//parse the data into a json object
let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any]
//loop through each result in the json array
for jsonResult in jsonArray {
//Cast json result as a dictionary
let jsonDict = jsonResult as! [String:String]
//create new bar data and set its properties
let bardata = DataModel(name: jsonDict["Bar Name"]!, cover: jsonDict["Bar Cover"]!, deals: jsonDict["Drink Deals"]!)
//add it to the array
bar_info.append(bardata)
}
}
catch{
print("There was an error")
}
//call function here
update_cover()
}
func update_cover(){
var a_cover = "$5"
var b_cover = "$5"
var c_cover = "$5"
var d_cover = "$5"
for item in bar_info{
if item.name == "omitted"{
a = item.cover
}
else if item.name == "omitted"{
b_cover = item.cover
}
else if item.name == "omitted"{
c_cover = item.cover
}
else if item.name == "omitted"{
d_cover = item.cover
}
}
DispatchQueue.main.async {
self.aCoverView.text = a_cover
self.bCoverView.text = b_cover
self.cCoverView.text = c_cover
self.dCoverView.text = d_cover
}
}