2012-06-21 4 views
1

h 파일의 @interface 및 @end 블록 내의 resumeLayer 및 PauseLayer 메서드가 정의되었습니다. PlayPauseAction 방법에 resumeLayer 및 PauseLayer 메소드를 호출에 대한 m 파일별도의 클래스로 생성 된 UIImageview 레이어의 참조

-(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; 
} 

에서

@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)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; 
} 
} 
} 

이미지 뷰는 내가 원하는

- (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]; } 

세 번째라는 이름의 클래스에 정의되어 있습니다 ~까지 다음 사용

UIImageView *myImageView = [OtherClass getTheImageView]; 

를 사용하여 지금은이 이미지 뷰의 참조를 얻을 수있는 방법 imageview.layer 애니메이션

을 일시

[self pauseLayer:ImageView.layer]; 

에서 사용할 MainViewController 클래스에서이 ImageView.layer의 참조를 얻을 재생 일시 중지 일시 중지 및 다시 시작 Imageview 레이어 애니메이션

어느 하나는 MainviewController에 속성을 추가하고 준비하거나 이미지 뷰에 MainViewController에서 알림을 보낼 NSNotificationCenter를 사용할 때 ImageView이 값을 설정할 수 MainviewController

답변

1

하나에 ImageView.layer를 참조 thisHow를 도와 줄 수있다

ImageView에서 :

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

MainViewController에서 :

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

알림 메커니즘은 당신에게 두 클래스 사이의 매우 느슨한 결합을 제공하고, 아주 사용하기 쉽습니다.

관련 문제