Ответы пользователя по тегу iOS
  • Как сделать rotate картинки и scale чтобы захватить максимально отображаемую область?

    @kirick
    Вот чертёж того, как всё выглядит в итоге.
    UnOTUGC1V24.jpg
    Тут:
    • ABCD — ваша картинка после scale
    • A'B'C'D' — ваш контейнер, в котором картинка отображается (например, экран)
    • α — угол поворота картинки


    Собственно, нам надо найти величину s = CD / C'D'. При этом C'D' у нас уже есть — это ширина экрана. Значит, вся задача в том, чтобы найти CD.
    Видим, что CD = CC' + C'D = AA' + C'D. При этом оба слагаемых являются катетами в треугольниках, где мы знаем гипотенузу и угол при одном из катетов (то, что угол поворота картинки α равен углу D'C'D, докажите сами, это несложно).
    Далее простые преобразования:
    sinα = AA' / A'D' <=> AA' = A'D' · sinα = CC'
    cosα = C'D / C'D' <=> C'D = C'D' · cosα
    Таким образом, CD = CC' + C'D = A'D' · sinα + C'D' · cosα
    Значит, величина увеличения равна s = CD / C'D' = (A'D' · sinα + C'D' · cosα) / C'D'.
    То есть, высоту картинки умножаем на синус угла поворота, прибавляем ширину картинки, умноженную на косинус угла поворота и делим это всё на ширину картинки.

    UPD: если у вас соотношение сторон картинки не равно соотношению сторон контейнера, то вам надо будет высчитать scale дважды: один раз для ширины, другой раз для высоты, и выбрать больший scale.
    Ответ написан
    1 комментарий