Ответ 1
Вы можете применять несколько преобразований, складывая их друг над другом.
var t = CGAffineTransform.identity
t = t.translatedBy(x: 100, y: 300)
t = t.rotated(by: CGFloat.pi / 4)
t = t.scaledBy(x: -1, y: 2)
// ... add as many as you want, then apply it to to the view
imageView.transform = t
Или более компактно (но не обязательно как читаемый):
imageView.transform = CGAffineTransform.identity.translatedBy(x: 100, y: 300).rotated(by: CGFloat.pi / 4).scaledBy(x: -1, y: 2)
Эта серия преобразований создает изображение справа:
Благодаря этому ответу, чтобы узнать, как это сделать.
Примечания
-
Порядок, в котором вы применяете преобразования, имеет значение. Например, если преобразования были выполнены в обратном порядке, это привело бы к следующему результату.
t = t.scaledBy(x: -1, y: 2) t = t.rotated(by: CGFloat.pi / 4) t = t.translatedBy(x: 100, y: 300)
См. также
- CGAffineTransform Reference (docs)
- Transforms (docs)
- Swift: перевод и поворот CGContext, визуальное объяснение (iOS/Xcode)
- Демистификация CGAffineTransform
Этот ответ был протестирован с помощью Swift 4