2017-02-03 4 views
1

10.0秒後に起動されたtimerを作成し、NSTimerインスタンスへのポインタであるselfのtargetMethod:を呼び出します。このタイマーは、関連付けられたviewcontroller画面がビューにあるときにのみ有効です。タイマーはUIをブロックするため、PhotoView.xibという.xibファイルをロードしています。しかし、PhotoView.xibがViewControllerから削除/解除されたときにタイマーを再起動する方法はわかりません。 誰かが、parentViewcontrollerから.xibが削除されたときに、(parentViewcontrollerの)タイマーを再起動する方法を教えてもらえますか?UIView.xibがios 9で終了したときに、スケジュールされたNSTimerをUIViewControllerで再起動するには?

SampleView.h

#import <UIKit/UIKit.h> 

@interface SampleView : UIView 

@property(nonatomic,retain)IBOutlet UIView* view; 
@property(nonatomic,retain)IBOutlet UIImageView* imageview; 
@property(nonatomic,retain)IBOutlet UIButton* dismissButton; 

@end 

SampleView.m

#import "GroupPhotoView.h" 

@implementation SampleView 
@synthesize imageview,view,dismissButton; 

-(IBAction) dismissView: (id) sender{ 
    [self removeFromSuperview]; 
} 

@end 

SampleViewController.h

#import <UIKit/UIKit.h> 

@interface SampleViewController : UIViewController 
@property(nonatomic,retain)NSTimer *timer; 

@end 

SampleViewController.m

#import "SampleViewController.h" 

@interface SampleViewController() 
@end 

@implementation SampleViewController 
@synthesize timer; 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

-(void)viewDidAppear:(BOOL)animated{ 

self.timer=[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(sampleMethod:) userInfo:nil repeats:YES]; 
} 

-(void)viewWillDisappear:(BOOL)animated{ 
    //stop the timer when SampleVC is not in the view 
    if ([self.timer isValid]) 
    { 
     [self.timer invalidate]; 
     self.timer=nil; 
    } 
} 

- (IBAction)displayAction:(id)sender 
{ 
    [self loadSampleImage]; 
} 


-(void)loadSampleImage:(UIImage*)aImage{ 

    if ([self.timer isValid]) 
    { 
     [self.timer invalidate]; 
     self.timer=nil; 
    } 

    SampleView *customView =(SampleView *)[[[NSBundle mainBundle] loadNibNamed:@"PhotoView" owner:self options:nil] objectAtIndex:0]; 
    customView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.8]; 
    customView.imageview.image=[UIImage imageNamed:@"cs"]; 

    [customView setFrame:self.view.frame]; 
    [self.navigationController.view addSubview:customView]; 
} 
} 

@end 

ありがとうございます。

答えて

1

代理人を使用してNSTimerを再起動することができます。デリゲートでは、イベントが発生したときに、あるオブジェクトが別のオブジェクトにメッセージを送信することを許可します。デリゲートは、オブジェクトAがオブジェクトBを呼び出すときに同様の問題に使用されますが、アクションが完了すると、AはBがタスクを完了し、必要なアクションをとることを知る必要があります。

SampleViewを作成します。その後

// Delegate to respond back in SampleView.m 
id <SampleView> _delegate; 
// OR in SampleView.h 
@property (strong, nonatomic) id _delegate; 

はSampleView.mでアクション完了呼追加:

-(IBAction) dismissView: (id) sender{ 
    [self removeFromSuperview]; 
    [_delegate startTimer]; 
} 

のメソッドを追加しますSampleViewController.mにタイマーを起動します。

customView.delegate = self; 

-(void)startTimer 
{ 
    self.timer=[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(sampleMethod:) userInfo:nil repeats:YES]; 
} 

それはします.xibがparentViewcontrollerから閉じられた後、再びタイマーを開始します。

+0

ありがとう:) @Siddhesh Mhatre – sarita

関連する問題