UIWebView не дает никакой информации о прогрессе в обычном режиме. Что вам нужно сделать, это сначала получить ваши данные асинхронно, используя NSURLConnection.
Когда метод делегата NSURLConnection connection:didReceiveResponse
, вы берете число, которое вы получаете от expectedContentLength
, и используете его как максимальное значение. Затем, внутри метода делегата connection:didReceiveData
, вы будете использовать свойство length
экземпляра NSData, чтобы сообщать вам, как далеко вы продвинулись, поэтому ваша доля прогресса будет length / maxLength
, нормализованная между 0,0 и 1,0 .
Наконец, вы собираетесь инициировать веб-просмотр с данными вместо URL (в вашем connection:didFinishLoading
методе делегата).
Два предостережения:
Возможно, что свойство expectedContentLength
NSURLResponse будет -1 (NSURLReponseUnknownLength
постоянная). В этом случае я бы предложил вызвать стандартный UIActivityIndicator, который вы отключили внутри connection:didFinishLoading
.
Убедитесь, что каждый раз, когда вы манипулируете видимым элементом управления из одного из методов делегата NSURLConnection, вы делаете это, вызывая performSelectorOnMainThread:
- в противном случае вы начнете получать страшные ошибки EXC_BAD_ACCESS.
Используя эту технику, вы можете показать индикатор выполнения, когда вы знаете, сколько данных вы должны получить, и счетчик, если вы не знаете.