所以我有一个可以放大波形的应用程序。
然后我打开修剪控件来编辑波形。当我点击编辑按钮时,修剪控件以一定长度开始,如下所示:
-(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;
答案 0 :(得分:0)
我的猜测是你的实例变量_trimControl是零。起初它是持有和反对的,但由于某种原因,它被释放。
尝试在两个地方记录:
NSLog(@"_trimControl = %@", _trimControl);
您的trimControl属性是如何声明的?您使用ARC还是手动引用计数?如果您正在使用手动引用计数并且_trimControl被创建为自动释放,则可以在用户与用户界面交互时释放它。
使用有关您如何定义trimControl属性以及如何初始化它的更多信息更新您的问题。