我将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
。
任何人都可以告诉您如何在PauseLayer
方法中调用resumeLayer
和playpauseAction
方法。
感谢您的帮助。
答案 0 :(得分:1)
当你的方法可以时,你需要立即上课而不是课。
所以不要像这样调用它
[self PauseLayer:CALayer];
做类似
的事情[self PauseLayer:(UIButton*)sender.layer];
答案 1 :(得分: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类本身的引用。
答案 2 :(得分:0)
尝试更改P开启 - (void)pauseLayer:(CALayer *)layer {
大写或左右。