接続がタイムアウトしたときに「接続タイムアウト」アニメーションをユーザーに表示するために使用する小さなサブクラス化された UIView があります。サブビューが表示されたときに、ユーザーがテーブルをスクロールしてもスクロールしないように、scrollViewDidScroll というコードをメソッドに追加しました。ただし、接続タイムアウトビューのアニメーション化が完了し、ビューがスーパービューから削除されると、テーブルビューがスクロールされるたびに、割り当て解除されたインスタンスエラーに送信されたメッセージが表示されます。サブビューがゼロかどうかを確認するためにチェックを入れましたが、うまくいかないようです。どうすればこれを回避できますか?
サブビューの提示方法:
// Show No Internet Message
noInternetView = [FCDataController presentNoInternetMessage:self.view];
noInternetViewOrigin = noInternetView.frame.origin;
FCDataController クラスでのビューの表示方法:
+ (NoInternetView *)presentNoInternetMessage:(UIView *)view {
NoInternetView *internet = [[NoInternetView alloc] initWithFrame:CGRectMake(0, view.bounds.size.height, view.bounds.size.width, 30) andPosition:NoInternetPositionBottom];
[view addSubview:internet];
CGRect position = CGRectMake(0, view.bounds.size.height - 30, view.bounds.size.width, 30);
[UIView animateWithDuration:0.4
delay:0.5
options:UIViewAnimationOptionCurveEaseOut
animations:^{
internet.frame = position;
}
completion:^(BOOL finished) {
NSLog(@"DONE");
[self performSelector:@selector(hideInternetMessageForView:) withObject:view afterDelay:2.0];
}];
return internet;
}
+ (BOOL)hideInternetMessageForView:(UIView *)view {
NoInternetView *internet = [self NoInternetForView:view];
if (internet != nil) {
CGRect remove = CGRectMake(0, view.bounds.size.height, view.bounds.size.width, 30);
[UIView animateWithDuration:0.5
delay:1.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
internet.frame = remove;
}
completion:^(BOOL finished) {
NSLog(@"DONE");
[internet removeFromSuperview];
}];
return YES;
}
return NO;
}
+ (NoInternetView *)NoInternetForView:(UIView *)view {
NoInternetView *internet = nil;
NSArray *subviews = view.subviews;
Class internetClass = [NoInternetView class];
for (UIView *aView in subviews) {
if ([aView isKindOfClass:internetClass]) {
internet = (NoInternetView *)aView;
}
}
return internet;
}
ScorllView メソッド:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (noInternetView != nil) {
noInternetView.frame = CGRectMake(self.noInternetViewOrigin.x, self.noInternetViewOrigin.y + self.tableView.bounds.origin.y, noInternetView.frame.size.width, noInternetView.frame.size.height);
}
}