如何使用anchorPoint在MTKView中缩放和平移

时间:2018-12-20 06:44:19

标签: objective-c opengl-es

我在MTKView上添加了UIScrollView进行缩放和平移,但是MTKView在缩放时显得模糊。有人有什么建议吗?

因此,我最终使用UIPanGestureRecognizerUIPinchGestureRecognizer进行缩放和平移,但是我不知道要使用anchorPoint进行缩放,平移后如何保持距离泛?我可以平移图像并限制resultMatrix,但是平移有一些问题。

(void)handlePan:(UIPanGestureRecognizer *)recognizer {
    CGPoint point = [recognizer translationInView:recognizer.view];
    matrix.panMatrix = (matrix_float4x4) {
        simd_make_float4(1, 0, 0, 0),
        simd_make_float4(0, 1, 0, 0),
        simd_make_float4(0, 0, 1, 0),
        simd_make_float4((point.x + self.transX) / (self.frame.size.width / 2), - (point.y + self.transY) / (self.frame.size.height / 2), 0, 1),
    };

    matrix.resultMatrix = simd_mul(matrix.panMatrix,matrix.scaleMatrix);

    if(matrix.resultMatrix.columns[3].x >= (self.totalScale - 1)) {
        matrix.resultMatrix.columns[3].x = self.totalScale - 1;
        self.transX = (self.totalScale - 1) * (self.frame.size.width / 2);
    }

    if(matrix.resultMatrix.columns[3].y >= (self.totalScale - 1)) {
        matrix.resultMatrix.columns[3].y = self.totalScale - 1;
        self.transY = -(self.totalScale - 1) * (self.frame.size.height / 2);
    }

    if(matrix.resultMatrix.columns[3].x <= -(self.totalScale - 1)) {
        matrix.resultMatrix.columns[3].x = - (self.totalScale - 1);
        self.transX = -(self.totalScale - 1) * (self.frame.size.width / 2);
    }

    if(matrix.resultMatrix.columns[3].y <= -(self.totalScale - 1)) {
        matrix.resultMatrix.columns[3].y = - (self.totalScale - 1);
        self.transY = (self.totalScale - 1) * (self.frame.size.height / 2);
    }

    if(recognizer.state == UIGestureRecognizerStateEnded) {
        self.transX = self.transX + point.x;
        self.transY = self.transY + point.y;
    }
}

0 个答案:

没有答案