2009-11-15 2 views
0

표시기보기를 표시 할 수 없습니다.표시기 표시 방법

ItemController.h

#import <UIKit/UIKit.h> 


@interface ItemController : UITableViewController { 
    UIView* loadingView; 
    UIActivityIndicatorView* indicator; 
} 

@property (nonatomic, retain) UIView *loadingView; 
@property (nonatomic, retain) UIActivityIndicatorView *indicator; 

@end 

ItemController.m

..... 
- (void)netAccessStart { 


    loadingView = [[UIView alloc] initWithFrame:[[self view] bounds]]; 
    [loadingView setBackgroundColor:[UIColor blackColor]]; 
    [loadingView setAlpha:0.5]; 
    indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    [[self view] addSubview:loadingView]; 
    [loadingView addSubview:indicator]; 
    [indicator setFrame:CGRectMake ((320/2)-20, (480/2)-60, 40, 40)]; 
    [indicator startAnimating]; 

} 

- (void)netAccessEnd { 


    [indicator stopAnimating]; 
    [loadingView removeFromSuperview]; 

} 

- (void)dealloc { 
    [loadingView release]; 
    [indicator release]; 
    [super dealloc]; 
} 
..... 

상속 클래스

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self netAccessStart]; 
    sleep(1); 
    [self netAccessEnd]; 
} 

답변

1

sleep() 블록 실행 앱은에서의 -viewWillAppear 통화 동결되는 것을 의미 당신의 loadingView가 그 끝에서 제거되는 끝 어뷰. 즉, [self netAccessStart];[self netAccessEnd]; 사이에 도면이 나타나지 않습니다. 나는 즉시 테스트에 대한 다른 후 용도 인 경우, 내가 -viewDidAppear:-netAccessStart 명령을 이동할 것 다음으로 sleep/-netAccessEnd 전화를 대체 하나를 호출한다고 가정 :

[self performSelector:@selector(netAccessEnd) withObject:nil afterDelay:1]; 

...하는 실행을 차단하지 않고 동일한 효과를 갖습니다.

0

실제로 뭔가를하는 대신 sleep을 사용하기 때문입니다. 아마도 인터넷에서 무언가를 검색한다는 의미 일 것입니다. 그렇게하고, 연결이 완료되거나 실패 할 때만 메시지를 netAccessEnd에게 보내십시오.

하드 코딩 된 간격 (예 : 1 초)을 계속 사용하는 다른 형태의 지연을 sleep으로 바꾸는 것은 나쁜 생각입니다. 1 초 미만이면 사용자가 필요 이상으로 오래 기다리게됩니다. 1 초보다 오래 걸리면 사용자가 기다리는 것이 무엇이든 실제로 완료되기 전에 표시기를 끄십시오.

사용자가 완료 대기 중일 때 표시기를 내릴 필요가 있습니다.