입니다. 파형의 트림 편집기를 만들고 있는데, 움직임이 뒤처져 있지만 가끔씩 만 발생합니다.UIImageView lags의 움직임은
먼저 앱을 실행하고 완벽하게 작동합니다. 이것은 내가 일어나기를 원하는 것입니다 :
그러면 어떤 코드도 변경하지 않고 다시 실행하고 동작은 뒤처집니다. 그 동영상은 다음과 같습니다 : https://www.youtube.com/watch?v=9fZTV877hSA
때로는 효과가 있고 때로는 그렇지 않습니다.
작동 방식에 대한 간단한 개요 : 사용자가 확대하거나 팬 할 수있는 파형이 있습니다. 파형은 샘플로 나뉘어 지므로 먼저 트림 편집기의 x 좌표 아래에 샘플을 찾은 다음 줌 또는 팬으로 인해 샘플이 변경되면 뒤로 작업하여 트리밍 편집기가 어떤 샘플을 사용해야하는지 파악하고 트림 편집기와 그 구성 요소를 새로운 해당 샘플로 이동하십시오. 여기
내가 그 합성 그런
@property (strong, nonatomic) UIView *editor;
@property (nonatomic, strong) UIPanGestureRecognizer *panGesture;
@property (nonatomic, assign) CGFloat leftHandleSamples;
@property (nonatomic, assign) CGFloat rightHandleSamples;
@property CGFloat leftXDimension;
@property CGFloat rightXDimension;
를 초기화하는 방법입니다. 그런 다음
내가있는 viewDidLoad이 gestureRecognizer을 추가
self.waveformPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleWaveformPanGesture:)];
self.waveformPanRecognizer.delegate = self;
[self.waveform addGestureRecognizer:self.waveformPanRecognizer];
그리고이
-(IBAction)edit:(id)sender {
if (player.duration) {
editor = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.waveform.frame.size.width/2, 22)];
[editor setCenter: CGPointMake(self.waveform.center.x, self.waveform.center.y)];
editor.backgroundColor = [UIColor grayColor];
editor.alpha = .75;
[self.view addSubview:editor];
leftHandleSamples = self.waveform.zoomStartSamples + (self.waveform.zoomEndSamples-self.waveform.zoomStartSamples) * (leftHandle.frame.origin.x)/self.waveform.bounds.size.width;
rightHandleSamples = self.waveform.zoomStartSamples + (self.waveform.zoomEndSamples-self.waveform.zoomStartSamples) * (rightHandle.frame.origin.x +rightHandle.frame.size.width)/self.waveform.bounds.size.width;
}
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
- (IBAction)handleWaveformPanGesture:(UIPanGestureRecognizer *)recognizer {
leftXDimension = ((leftHandleSamples - self.waveform.zoomStartSamples)/(self.waveform.zoomEndSamples-self.waveform.zoomStartSamples)) *(self.waveform.frame.size.width);
rightXDimension = ((rightHandleSamples - self.waveform.zoomStartSamples)/(self.waveform.zoomEndSamples-self.waveform.zoomStartSamples)) *(self.waveform.frame.size.width);
editor.center = CGPointMake((rightXDimension - leftXDimension)/2 + leftXDimension, editor.center.y);
}
그래서 무슨 일하는 것은 이것이다 :
이의 말을하자 실제로의 일부입니다 leftHandlesample 325 (파형)은 x 축 위치 20에 있습니다. 사용자가 파형을 왼쪽으로 이동하면 leftHandleSample 325가 x 축 위치 10에 있다고 가정 해 봅니다.
는 팬 제스처 위의 트림 편집기의 왼쪽 핸들도 그래서 leftHandleSample가 업데이트되지 않습니다 x 축 위치 (10)
에 가야 있도록 파형과 함께 이동하는 편집기를 알려줍니다. 사용자가 파형을 이동 한 후 샘플이있는 위치에 따라 x 값만 다시 계산됩니다.
그러나 지연이있는 것 같습니다 (일부만 해당). 그게 바로 당황한 것입니다.
내가 무엇을해야하나요? 감사.
최소 테스트 케이스를 만들 수 있습니까? 문제에 영향을 미치지 않습니까? 예를 들어, 손잡이 이미지, 집어 넣는 제스처 등? 모든 것을 정수 값으로 만드는 경우에도 같은 문제가 계속 발생합니까? –
예, 방금 pangesturerecognizer를 제거했습니다. 편집 작업에서 하위 뷰를 추가하지 않았고 leftHandle.center 및 rightHandle.center를 제거했으며 CGFloat 대신 int에 leftXDimension 및 rightXDimension을 설정했습니다. ? 모든 것의 중심을 정수 값으로 만드는 것?). 지금까지 같은 문제. – MScottWaller
관련없는 코드를 질문에서 삭제할 수 있습니까? 또한 handleWaveformPanGesture가 실제로 제스처 인식기를 참조하지 않기 때문에 어떻게 작동하는지 이해할 수 없습니다. –