2012-06-21 2 views
1

Определенное resumeLayer и метод PauseLayer в блоке @interface и @end в h-файле.Ссылка на слой UIImageview, созданный в отдельном классе

@interface MainViewController : UIViewController 

@property (nonatomic, retain) UIToolbar *toolbar; 
@property (strong)AVAudioPlayer *audioPlayer; 
@property (nonatomic, retain) NSTimer * timer; 

- (void)resumeLayer:(CALayer *)layer; 
- (void)pauseLayer:(CALayer *)layer; 
@end 

методы в м файле

-(void)pauseLayer:(CALayer*)layer 
{ 
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
    layer.speed = 0.0; 
    layer.timeOffset = pausedTime; 
} 

-(void)resumeLayer:(CALayer*)layer 
{ 
    CFTimeInterval pausedTime = [layer timeOffset]; 
    layer.speed = 1.0; 
    layer.timeOffset = 0.0; 
    layer.beginTime = 0.0; 
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 
    layer.beginTime = timeSincePause; 
} 

Для вызова resumeLayer и метод PauseLayer в методе PlayPauseAction

-(void)playpauseAction:(id)sender { 

if([audioPlayer isPlaying]) 
{ 
[sender setImage:[UIImage imageNamed:@"Play Icon.png"] forState:UIControlStateSelected]; 
[audioPlayer pause]; 
[self pauseTimer]; 
[self pauseLayer:ImageView.layer]; // Pause the CALayer of the UIImageView 

}else{ 
[sender setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal]; 
[audioPlayer play]; 
[self resumeTimer]; 

if(isFirstTime == YES){ 
self.timer = [NSTimer scheduledTimerWithTimeInterval:11.0 
                target:self 
               selector:@selector(displayviewsAction:) 
               userInfo:nil 
               repeats:NO]; 
    isFirstTime = NO; 
} 
} 
} 

ImageView определяется в классе с именем третьего

- (void)viewDidLoad 
{ 
// Displays UIImageView 
UIImageView* ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 5, 300, 235)]; 
self.view.backgroundColor = [UIColor brownColor]; 
// load all the frames of our animation 
ImageView.animationImages = [NSArray arrayWithObjects:  
          [UIImage imageNamed:@"3a.png"], 
          [UIImage imageNamed:@"3b.png"], 
          nil]; 
// all frames will execute in 24 seconds 
ImageView.animationDuration = 24; 
// start animating 
[ImageView startAnimating]; 
ImageView.layer.borderWidth = 2; 
ImageView.layer.borderColor = [[UIColor whiteColor]CGColor];  
[ImageView.layer setMasksToBounds:YES]; 
[ImageView.layer setCornerRadius:15.0f]; 
[self.view addSubview:ImageView]; } 

Я хочучтобы получить ссылку на эту ImageView.layer в классе MainViewController использовать в

[self pauseLayer:ImageView.layer]; 

, чтобы приостановить imageview.layer анимация

Теперь, как я могу получить ссылку на эту ImageView с помощью

UIImageView *myImageView = [OtherClass getTheImageView]; 

использовать следующее в playpauseAction для приостановки и возобновления анимации уровня изображения

[self pauseLayer:myImageView.layer]; // Pause the CALayer of the UIImageView 

Любой может помочь мне с thisHow ссылаться ImageView.layer в MainviewController

ответ

1

Либо добавить свойство MainviewController и пусть ImageView установить его значение, когда оно готово, или вы используете NSNotificationCenter отправить уведомление от MainViewController к ImageView;

В ImageView:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pauseMyLayer) name:kPauseLayerNotif object:nil]; 

В MainViewController:

[[NSNotificationCenter defaultCenter] postNotificationName:kPauseLayerNotif object:self]; 

Механизм оповещения обеспечивает вам очень слабую связь между этими двумя классами и очень проста в использовании.

Смежные вопросы