私のインターフェイスには 2 つの CFFloat プロパティがあります。ジェスチャ認識エンジンでそれらを使用しようとしていますが、「allTouchesAreOnPreviewLayer」を使用した if ステートメントで「バイナリ式 float および double のオペランドが無効です..」というエラーが引き続き発生します。これを適切に修正する方法がわかりません。さらに情報が必要な場合はお知らせください。UIView をズームするピンチを実装しようとしています。
インターフェイス プロパティ:
CGFloat *startingScale;
CGFloat *effectiveScale;
実装方法:
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) {
startingScale = effectiveScale;
}
return YES;
}
-(IBAction)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer
{
NSLog(@"Pinched View");
BOOL allTouchesAreOnThePreviewLayer = YES;
NSUInteger numTouches = [recognizer numberOfTouches], i;
for ( i = 0; i < numTouches; ++i ) {
CGPoint location = [recognizer locationOfTouch:i inView:imagePreview];
CGPoint convertedLocation = [captureVideoPreviewLayer convertPoint:location fromLayer:captureVideoPreviewLayer.superlayer];
if ( ! [captureVideoPreviewLayer containsPoint:convertedLocation] ) {
allTouchesAreOnThePreviewLayer = NO;
break;
}
}
// エラーはこちら:
if ( allTouchesAreOnThePreviewLayer )
{
effectiveScale = startingScale * recognizer.scale;
if (effectiveScale < 1.0)
effectiveScale = 1.0;
CGFloat maxScaleAndCropFactor = [[stillImageOutput connectionWithMediaType:AVMediaTypeVideo] videoMaxScaleAndCropFactor];
if (effectiveScale > maxScaleAndCropFactor)
effectiveScale = maxScaleAndCropFactor;
[CATransaction begin];
[CATransaction setAnimationDuration:.025];
[captureVideoPreviewLayer setAffineTransform:CGAffineTransformMakeScale(*(effectiveScale), *(effectiveScale))];
[CATransaction commit];
}
}