Рамка-прямоугольник представляет позицию и размер представления в системе координат его суперпредставления. Прямоугольник границ представляет внутреннюю систему координат представления, поэтому прямоугольник границ является своего рода ответственным за фактическое количество пикселей (соответственно количество столбцов и строк) представления.
Если для contentMode установлено значение UIViewContentModeRedraw
и вы изменяете прямоугольник рамки, то размер прямоугольника границ автоматически настраивается так, чтобы он соответствовал размеру прямоугольника рамки, и наоборот, в противном случае границы - прямоугольник остается нетронутым. Для визуализации разница между прямоугольником рамки и прямоугольником границ компенсируется автоматически созданной матрицей преобразования.
Последние два предложения верны, только если свойство transform представления является единичной матрицей. Если это не так, свойство frame является недействительным, и вы несете ответственность за правильное преобразование из системы координат представления в систему координат его суперпредставления. Поэтому, если вы хотите применить вращение, вы также должны применить правильный перевод и масштабирование, чтобы получить вид, в котором вы хотите, чтобы он был относительно координат его суперпредставления.
Так что в вашем случае вы можете установить прямоугольник границ на CGRectMake(-width/2, -height/2, width, height)
и установить его преобразование на
CGAffineTransformConcat(
CGAffineTransformMakeRotation(angle),
CGAffineTransformMakeTranslation(x, y)
)
, где x и y - координаты центра вида в системе координат его суперпредставления.