Какой результат будет выведен? (задача №35)

bounds остаётся (0, 0, 100, 100). Геометрически масштабированный прямоугольник занимает (-100, -50, 200, 100), но frame при non-identity transform не является надёжным контрактом.

Короткий ответ

Что ответить на собеседовании

bounds остаётся (0, 0, 100, 100). Геометрически масштабированный прямоугольник занимает (-100, -50, 200, 100), но frame при non-identity transform не является надёжным контрактом.

Подробный разбор

Ответ с пояснениями

Условие

В Swift создаётся объект UIView с заданным фреймом, после чего к нему применяется аффинное преобразование — масштабирование по оси X в два раза, при этом по оси Y масштаб оставляется без изменений. Необходимо определить, какие координаты и размеры будут напечатаны для свойств bounds и frame после применения трансформации.

import UIKit

let box = UIView(frame: .init(x: -50, y: -50, width: 100, height: 100))
box.transform = .init(scaleX: 2, y: 1)

print(box.bounds) // x: ?, y: ?, width: ?, height: ?
print(box.frame)  // x: ?, y: ?, width: ?, height: ?

Ответ

bounds остаётся (0, 0, 100, 100). Геометрически масштабированный прямоугольник занимает (-100, -50, 200, 100), но frame при non-identity transform не является надёжным контрактом.

Исходный центр равен (0, 0), масштабирование вокруг стандартного центра удваивает ширину, сохраняя высоту. В типичном запуске простой scaleX даёт frame с x -100, y -50, шириной 200 и высотой 100. Однако Apple прямо предупреждает не полагаться на frame при transform, отличном от identity. Для расчётов используйте bounds, center и преобразование координат; не обобщайте наблюдаемое значение frame на произвольные повороты или сложные трансформации.

Источник: developer.apple.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее