音频修剪ios中的修剪长度出现错误

时间:2014-10-26 01:48:59

标签: ios objective-c audio

所以我有一个可以放大波形的应用程序。

然后我打开修剪控件来编辑波形。

当我点击编辑按钮时,修剪控件以一定长度开始,如下所示:

-(IBAction)edit:(id)sender {

if (player.duration) {

_trimControl = [[RETrimControl alloc] initWithFrame:CGRectMake(0, 0, self.waveform.frame.size.width, self.waveform.frame.size.height/4)];

_trimControl.length = player.duration*((self.waveform.zoomEndSamples-self.waveform.zoomStartSamples)/self.waveform.totalSamples);

_trimControl.delegate = self;
[self.view addSubview:_trimControl];
[_trimControl setCenter:CGPointMake(self.waveform.center.x, self.waveform.center.y)];
}
}

这给了我正确的_trimControl.length。

但是,当我尝试在用户放大波形后重置长度时,对于完全相同的公式,它会给出0的值。

首先,我将一个UIPinchGestureRecognizer分配给我的波形视图,这样当用户完成对波形的捏合时,就会发生这样的动作:

-(void)pinchEnd:(UIPinchGestureRecognizer*) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateEnded && self.trimControl != nil) {

    [self resetTrim];
}
}

resetTrim方法就是这样

-(void)resetTrim {

_trimControl.length = player.duration*((self.waveform.zoomEndSamples-self.waveform.zoomStartSamples)/self.waveform.totalSamples);


NSLog(@"This is how many zoomEndSamples %lu", self.waveform.zoomEndSamples);
NSLog(@"This is how many zoomStartSamples %lu", self.waveform.zoomStartSamples);
NSLog(@"This is how many zoomTotalSamples %lu", self.waveform.totalSamples);
NSLog(@"This is how many seconds %f", player.duration);
NSLog(@"This is the trimcontrol %ld", (long)self.trimControl.length);
}

这是我得到的NSLog读数:

This is how many zoomEndSamples 2202964
This is how many zoomStartSamples 1046166
This is how many zoomTotalSamples 3249152
This is how many seconds 73.629025
This is the trimcontrol 0

奇怪的是,如果我除了self.trimControl.length之外的所有值都取值,那么计算结果很好。它绝对不应该是0.并且在上面的编辑IBAction中它不是零。

任何想法我做错了什么?为什么self.trimControl.length以不同的方式出现?

更新:

这就是我在ViewController.h文件中声明_trimControl的方法。

@property (strong, nonatomic) IBOutlet RETrimControl *trimControl;

1 个答案:

答案 0 :(得分:0)

我的猜测是你的实例变量_trimControl是零。起初它是持有和反对的,但由于某种原因,它被释放。

尝试在两个地方记录:

NSLog(@"_trimControl = %@", _trimControl);

您的trimControl属性是如何声明的?您使用ARC还是手动引用计数?如果您正在使用手动引用计数并且_trimControl被创建为自动释放,则可以在用户与用户界面交互时释放它。

使用有关您如何定义trimControl属性以及如何初始化它的更多信息更新您的问题。