我的应用程序遇到了一个奇怪的崩溃,这种崩溃只发生在 iOS5 上。问题似乎出在我的核心动画方法下面,因为当我没有为 aAnimation.repeatCount 或 0 设置值时它正在工作,但是当它旋转时我使用 get SIGABRT 消息,错误:-[NSConcreteValue doubleValue]: unrecognized selector sent to当我触摸设备/模拟器屏幕时实例 0x9628100。

任何帮助将不胜感激

我的 View 定义

- (void)loadView {
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];

UIView *contentView = [[UIView alloc] initWithFrame:screenRect];
contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

self.view = contentView;
[contentView 发布];
}

设置 subview

- (void)setUpPlacardView:(NSInteger)picture {
//创建 placard View ——它的 init 方法根据它的图像计算它的框架
PlacardView *aPlacardView = [[PlacardView alloc] init:picture asColor:asColor];
aPlacardView.desaturation = kotucHue;
self.placardView = aPlacardView;
[aPlacardView 发布];
[self.view addSubview:placardView];
}

subview 定义

@interface PlacardView : UIView {

UIImage *placardImage;
float 饱和;
UIColor *barva;
BOOL 开关模式;

}

@property (nonatomic, 保留) UIImage *placardImage;
@property(非原子) float 去饱和;
@property (readwrite) BOOL switchMode;

//这个对象的初始化器
- (id)init:(NSInteger)picture asColor:(BOOL)farba;

@结尾

并进行旋转

- (void)makeKspinning
{
//创建一个变换以在 z 轴上旋转
float 弧度 = 3.120;
CATransform3D 变换;
如果(旋转){
变换 = CATransform3DMakeRotation(弧度, 0.0, 0.0, 0.0);
}
别的
变换 = CATransform3DMakeRotation(弧度, 0.0, 0.0, 1.0);

CABasicAnimation *aAnimation;
aAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

CALayer *pLayer = placardView.layer;

aAnimation.toValue = [NSValue valueWithCATransform3D:transform];
aAnimation.duration = spinSpeed;
aAnimation.cumulative = YES;
aAnimation.repeatCount = HUGE_VALF;

[pLayer addAnimation:aAnimation forKey:@"animatePlacardViewToSpin"];

pLayer.opacity = spinOpacity;
}

最佳答案

我认为问题在于您将 toValue 设置为 NSValue ,但关键路径是 transform.rotation ,它不是 NSValue 。您应该使用 transform 作为您的 keyPath,或者您应该使用 transform.rotation.z(或任何轴)作为 keyPath 并使用一个简单的 NSNumber 作为您的值。

10-07 19:55