【问题标题】:Using CGAfflineTransformMakeScale/Rotation only does one action使用 CGAfflineTransformMakeScale/Rotation 只做一个动作
【发布时间】:2016-03-31 12:29:51
【问题描述】:

当用户将屏幕旋转为横向时,我正在尝试使视频旋转并放大。

- (void) orientationChanged:(NSNotification *)note
{
    bool switchedLeft;
    UIDevice * device = note.object;
    switch(device.orientation)
    {
        case UIDeviceOrientationPortrait:
            self.videoView.transform=CGAffineTransformMakeScale(0.5,0.5);

            if (switchedLeft) {
                self.videoView.transform=CGAffineTransformMakeRotation(-M_PI_2);

            }else{
                self.videoView.transform=CGAffineTransformMakeRotation(M_PI_2);
            }
            break;
        case UIDeviceOrientationLandscapeLeft:
            self.videoView.transform=CGAffineTransformMakeRotation(M_PI_2);
            self.videoView.transform=CGAffineTransformMakeScale(2.0, 2.0);
            switchedLeft=true;
            break;

        case UIDeviceOrientationLandscapeRight:
            self.videoView.transform=CGAffineTransformMakeRotation(-M_PI_2);
            self.videoView.transform=CGAffineTransformMakeScale(2.0, 2.0);
            switchedLeft=false;
            break;

        default:
            break;
    };
}

有很多问题。首先,当我最初旋转到横向时,它只进行一次转换,在这种配置中,它只是缩放它。

第二个问题是当我旋转到纵向时,它要求旋转,但它从不旋转。但是我可以在横向左侧和横向右侧之间来回移动并且它可以正确旋转。任何帮助将不胜感激

【问题讨论】:

    标签: ios objective-c iphone cgaffinetransform


    【解决方案1】:

    您实际上是在用缩放变换替换旋转变换。要同时应用两者,您需要使用CGAffineTransformConcat()

    CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI_2);
    CGAffineTransform scale = CGAffineTransformMakeScale(2.0, 2.0);
    self.videoView.transform = CGAffineTransformConcat(rotate, scale);
    

    至于第二部分,您不需要应用另一个旋转,而是使用CGAffineTransformIdentity 将其设置为默认值。

    case UIDeviceOrientationPortrait:
        CGAffineTransform scale = CGAffineTransformMakeScale(0.5,0.5);
        self.videoView.transform = CGAffineTransformConcat(CGAffineTransformIdentity, scale);
        break;
    

    【讨论】:

      【解决方案2】:

      试试这个

      CGAffineTransform transform = CGAffineTransformRotate(self. videoView.transform, M_PI);
      self. videoView.transform = transform;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-27
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        • 1970-01-01
        相关资源
        最近更新 更多