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

PauseLayerメソッド内の呼び出し方法とresumeLayerメソッドは誰でも教えてください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!

NSNumber が値ではないのと同様に、CALayer は値ではないため、コンパイラは文句を言います。10 + NSNumber のような演算はできません。上記のコードでは、NSNumber クラス自体への参照ではなく、クラス NSNumber のインスタンスであるオブジェクトが必要です。

于 2012-06-20T17:37:57.327 に答える
0

-(void)pauseLayer:(CALayer *)layer{のPを変更してみてください

大文字またはその周りに。

于 2012-06-20T16:29:37.867 に答える