iOS: зеркальное отображение содержимого на экране - PullRequest
24 голосов
/ 20 декабря 2011

Я хотел бы знать, возможно ли перевернуть содержимое UIView в одном устройстве; то есть не для внешнего монитора, а для самого устройства.

Я немного искал в Google, но все, что я могу найти, - это внешние экраны.

Ответы [ 2 ]

47 голосов
/ 20 декабря 2011

Вы можете использовать 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);
3 голосов
/ 21 декабря 2011

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];
}
...