【发布时间】:2014-07-04 13:21:33
【问题描述】:
我有一个应用程序,它显示一些由播放 MIDI 文件触发的基本动画。它在第一次播放期间工作正常,但在后续播放期间冻结。然后设备通常会重新启动,生成一个崩溃日志,表明发生了内核恐慌。有时它只是挂起而不重新启动。
动画由一个小的 png 图像组成,它的不透明度从高到低变化以产生淡化效果。
冻结发生在线:[self performSelectorOnMainThread:@selector( setPitch: ) withObject:[NSNumber numberWithInteger:[note intValue]] waitUntilDone:YES];
这是包含这一行的方法:
- (void)log:(NSNotification *)notification {
[NSThread isMainThread];
NSDictionary* info = notification.userInfo;
NSNumber *note;
note = [info objectForKey:kNAMIDI_Note];
BRMidiNoteName *noteConverter = [[BRMidiNoteName alloc] init];
NSString *noteName;
noteName = [noteConverter nameFromNumber:[note intValue] withNotation:[defaults valueForKey:kSettingsNotation]];
[self.currentNoteLabel performSelectorOnMainThread: @selector( setText: ) withObject: noteName waitUntilDone: YES];
[self performSelectorOnMainThread:@selector( setPitch: ) withObject:[NSNumber numberWithInteger:[note intValue]] waitUntilDone:YES];
}
-(void) setPitch:(NSNumber*) pitchValue{
NSInteger visualPitchValue = [pitchValue intValue]- [_currentTrack.trackStartNote intValue] - voiceTransposeValue + 1;
if ([defaults boolForKey:kSettingsVisualiser]) {
//UIImageView *img = [[UIImageView alloc]init];
UIImageView *img;
if ((visualPitchValue > 0 )) {
// highlight new pitch
img = (UIImageView *)[self.view viewWithTag:visualPitchValue];
if (([pitchValue integerValue] < [currentVoice.bridgeLow integerValue])) {
[img setImage:[UIImage imageNamed:@"bar_green.png"]];
}
else if (([pitchValue integerValue] <= [currentVoice.bridgeHigh integerValue])) {
[img setImage:[UIImage imageNamed:@"bar_orange"]];
}
else{
[img setImage:[UIImage imageNamed:@"bar_blue.png"]];
}
[img setAlpha:1.0];
// Set up fade out effect
CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadeOutAnimation setToValue:[NSNumber numberWithFloat:_fadeToOpacity]];
fadeOutAnimation.fillMode = kCAFillModeForwards;
fadeOutAnimation.removedOnCompletion = NO;
CAAnimationGroup *group = [CAAnimationGroup animation];
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
// [group setAnimations:[NSArray arrayWithObjects:fadeOutAnimation, pathAnimation, nil]];
[group setAnimations:[NSArray arrayWithObjects:fadeOutAnimation, nil]];
group.duration = 0.7f;
group.delegate = self;
[group setValue:img forKey:@"imageViewBeingAnimated"];
[img.layer addAnimation:group forKey:@"savingAnimation"];
}
}
}
【问题讨论】:
标签: ios objective-c cocoa-touch core-animation