0

在我的界面中有两个 CFFloat 属性。我试图在手势识别器中使用它们,但我继续在带有“allTouchesAreOnPreviewLayer”的 if 语句中收到错误“二进制表达式浮点数和双精度数的无效操作数..”。我不确定如何正确解决此问题。如果您需要更多信息,请与我们联系。我正在尝试实现捏合以放大 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];
}



}
4

1 回答 1

0

CFGloat是原始类型,而不是类。去掉声明中的星号。你要:

CGFloat startingScale;
CGFloat effectiveScale;
于 2013-12-15T05:52:15.363 回答