2

これらの警告を取り除くにはどうすればよいですか

「警告:「UIButton」は「-setPosition:」に応答しない場合があります

「警告:「UIButton」は「-addAnimation:forKey」に応答しない場合があります

私はここでそれらを取得します:

- (void)monBtnIn {

[monButton setPosition:CGPointMake(113.5,256.5)];
[monButton addAnimation:[self monInAnimation] 
                    forKey:@"position"];

}

すべてが正常にビルドおよびロードされますが、警告は好きではありません。これは、CALayer ではなく UIButton であるという事実に関係していると思います。

では、これを UIButton で機能させるにはどうすればよいでしょうか。

.h ファイル

IBOutlet UIButton *monButton;

これが KeyFrameAnimation です - 安定する「弾力のある」アニメーションを作成します。

- (CAAnimation*)monInAnimation {
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,NULL,113,520);
CGPathAddLineToPoint(path, NULL, 113.5, 286);
CGPathAddLineToPoint(path, NULL, 113.5, 242);
CGPathAddLineToPoint(path, NULL, 113.5, 270);  
CGPathAddLineToPoint(path, NULL, 113.5, 250);
CGPathAddLineToPoint(path, NULL, 113.5, 262);
CGPathAddLineToPoint(path, NULL, 113.5, 254);
CGPathAddLineToPoint(path, NULL, 113.5, 258);
CGPathAddLineToPoint(path, NULL, 113.5, 256.5);

CAKeyframeAnimation *
animation = [CAKeyframeAnimation 
             animationWithKeyPath:@"position"];

[animation setPath:path];
[animation setDuration:1.5];
NSArray *arr = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], 
 [NSNumber numberWithFloat:0.12], 
 [NSNumber numberWithFloat:0.24], 
 [NSNumber numberWithFloat:0.36], 
 [NSNumber numberWithFloat:0.48],
 [NSNumber numberWithFloat:0.60],
 [NSNumber numberWithFloat:0.72],
 [NSNumber numberWithFloat:0.84],
 [NSNumber numberWithFloat:1.0],nil];

 [animation setKeyTimes:arr];
 [animation setTimingFunctions:[NSArray arrayWithObjects:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], nil]];
 //[animation setAutoreverses:YES];
CFRelease(path);
return animation;

}

助けてくれてありがとう!

4

2 に答える 2

3

レイヤー自体をターゲットにしてみましたか

[monButton.layer setPosition:CGPointMake(113.5,256.5)];
[monButton.layer addAnimation:[self monInAnimation] 
                    forKey:@"position"];
于 2010-01-03T10:55:52.653 に答える
2

iPhone プロジェクトで「Objective-C warnings as errors」コンパイラ オプションをオンにすることを強くお勧めします。その方法を説明する記事をブログに書きました。

http://akosma.com/2009/07/16/objective-c-compiler-warnings/

これにより、このような実行時の問題を回避できます。私見では、コードを警告付きで出荷するべきではありません。

于 2010-01-03T14:21:12.697 に答える