le mie scuse, ragazzi, per l'utilizzo di Objective C, in questa soluzione, ma ho pensato che potrebbe aiutare gli altri, che non utilizzano ancora Swift. E, probabilmente, puoi convertirlo abbastanza facilmente in Swift. È più la metodologia che volevo evidenziare.
Non sono sicuro se Apple potrebbe rifiutare questa soluzione, ma qui va comunque.
Apple afferma che da iOS7 in poi UIAlertView non dovrebbe essere sottoclasse. La gerarchia vista per questa classe è privato e non deve essere modificato:
https://developer.apple.com/reference/uikit/uialertview?language=objc
In altre parole, l'aggiunta di un UIView a un UIAlertView non ha assolutamente alcun effetto.
Tuttavia, ho una soluzione che comporta l'aggiunta di UIProgressView sopra UIAlertView, ma aggiungendo il primo alla finestra dell'app. Utilizzando l'UIView superview.center proprietà, e alcuni piccoli aggiustamenti, il desiderato effetto può essere ottenuto:
-(void)addProgressBar{
float width = 232;
float height = 5;
self.progbar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
self.progbar.backgroundColor = [UIColor colorWithWhite:0.75f alpha:1.0f];
[self.progbar setFrame:CGRectMake(0,0,width,height)];
[self.progbar setTrackTintColor:[UIColor colorWithWhite:0.75f alpha:1.0f]];
[self.progbar setProgressTintColor:[UIColor colorWithRed:21.0f/255.0f green:126.0f/255.0f blue:251.0f/255.0f alpha:1.0f]];
self.progbar.alpha = 0.0;
[[UIApplication sharedApplication].keyWindow addSubview:self.progbar];
self.progbar.center = self.progbar.superview.center;
[self.progbar setFrame:CGRectMake(self.progbar.frame.origin.x,self.progbar.frame.origin.y+10,self.progbar.frame.size.width,self.progbar.frame.size.height)];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2.0];
[self.progbar setAlpha:1.0];
[UIView commitAnimations];
}
aggiungo il fade in, per permettere al UIAlertView di apparire completamente prima. Quindi aggiungere alcune altre funzioni di delegato per respingere l'UIProgressView, nei momenti giusti:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if(self.alert.cancelButtonIndex == buttonIndex){
[self.progbar removeFromSuperview];
}
}
- (void)alertViewCancel:(UIAlertView *)alertView{
[self.progbar removeFromSuperview];
}

Come si aggiorna il progresso? –
Puoi semplicemente cambiare "progressView.progress". Potrebbe essere più chiaro definire "var progressView: UIProgressView?" all'esterno (non nel blocco di completamento) come facoltativo e quindi impostare "progressView? .progress = 0.123". – coyer
perché usi le costanti? questo ottiene solo risultati visivi diversi su iPhone e iPad. In realtà, sembra solo buono in iPhone ritratto perché in landscape la progressview sembra spostata – Ricardo