iOS:屏幕镜像内容

25
我想知道是否有可能在同一设备内翻转UIView的内容;这意味着不是在外部显示器上,而是在设备本身上。我在Google上搜索了一下,但是找到的都是关于外部屏幕的内容。

1
如标题所示,镜像。 - Paul Peelen
2个回答

49

您可以使用带有负值的CGAffineTransformMakeScale。

CGAffineTransformMakeScale(1.0, -1.0);

可以通过以下方式应用于视图:

//Mirror top to bottom
view.transform = CGAffineTransformMakeScale(1.0, -1.0);
或者
//Mirror Left to Right
view.transform = CGAffineTransformMakeScale(-1.0, 1.0);

AVSampleBufferDisplayLayer解压和显示视频,镜像呢?从左到右?有什么想法吗?谢谢! - Sam
我已经想通了 :) _videoLayer.transform = CATransform3DMakeScale(-1.0, 1.0, 1.0);,如果有人需要镜像 AVSampleBufferDisplayLayer - Sam
@Sam 谢谢,这就是我所缺少的 CATransform3DMakeScale(-1.0, 1.0, 1.0)。 - bojan

3

CGAffineTransform在这里是您的好帮手。以下是一些简化的示例代码,从一个Xcode模板UIViewController中获取,以向其视图添加UILabel并使该视图镜像。镜像只是负比例的副作用。您可以使用CGAffineTransform方法做各种事情,不仅限于缩放。

- (void)viewDidLoad;
{
  [super viewDidLoad];

  UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  aLabel.text = @"Sample Text";
  [aLabel sizeToFit];

  //Add it to the center of our UIViewController's View
  CGRect labelFrame = aLabel.frame;
  labelFrame.origin.x = floorf((CGRectGetWidth(self.view.frame) - CGRectGetWidth(labelFrame)) / 2);
  labelFrame.origin.y = floorf((CGRectGetHeight(self.view.frame) - CGRectGetHeight(labelFrame)) / 2);
  aLabel.frame = labelFrame;

  //Mirror the UILabel left to right
  aLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);

  //OR Mirror the UILabel top to bottom
  //aLabel.transform = CGAffineTransformMakeScale(1.0, -1.0);

  [self.view addSubview:aLabel];
  [aLabel release];
}

3
这句话的意思是“难道不应该将UILabel从左到右镜像aLabel.transform = CGAffineTransformMakeScale(-1.0,1.0);吗?” - Kudit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接