0

我将 resumeLayer 和 PauseLayer 方法定义放在 h 文件中的 @interface 和 @end 块中。

@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

m 文件中的方法

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

现在想在 PlayPauseAction 方法中调用 resumeLayer 和 PauseLayer 方法

-(void)playpauseAction:(id)sender {

if([audioPlayer isPlaying])
{
    [sender setImage:[UIImage imageNamed:@"Play Icon.png"] forState:UIControlStateSelected];
    [audioPlayer pause];
    [self pauseTimer];
    [self pauseLayer: CALayer];

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

现在当我打电话

[self PauseLayer:CALayer]; 

&

[self resumeLayer:CALayer]; 

得到红色消息unexpected interface name CALayer expected expression

任何人都可以请告诉如何在方法中调用PauseLayerresumeLayer方法playpauseAction

感谢帮助。

4

3 回答 3

1

当您可以使用您的方法时,您需要立即而不是上课..

所以不要这样称呼它

[self PauseLayer:CALayer]; 

做类似的事情

[self PauseLayer:(UIButton*)sender.layer]; 
于 2012-06-20T17:04:50.850 回答
1

这行没有意义:

[self pauseLayer:CALayer]; 

因为 CALayer 是一个类。编译器希望您发送一个 CALayer 类型的对象。您需要执行以下操作:

//Get a reference to your UIImageView somehow
UIImageView *myImageView = [yourOtherClass getTheImageView];

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

为了解释原因,与这段代码相比,假设您有一个类似这样的方法,可以将 NSNumber 中的数字添加到存储在类中的 int“totalValue”:

/** Adds the number to totalValue **/
-(int)addNumber:(NSNumber)number {
    totalValue = totalValue + [number intValue]; 

    return totalValue;
}

调用此方法的正确方法例如是:

// Store the value 10 into an NSNumber
NSNumber *numberToAdd = [NSNumber numberWithInt:10];
[self addNumber:numberToAdd]; // Add number 10 to totalValue

但这是你想要做的:

[self addNumber:NSNumber]; // WRONG, 'NSNumber' is not a value!

编译器抱怨是因为 CALayer 不是一个值,就像 NSNumber 不是一个值一样。你不能做像 10 + NSNumber 这样的操作。上面的代码需要一个对象,一个 NSNumber 类的实例,而不是对 NSNumber 类本身的引用。

于 2012-06-20T17:37:57.327 回答
0

尝试更改 P on -(void)pauseLayer:(CALayer*)layer {

大写或周围的方式。

于 2012-06-20T16:29:37.867 回答