Ответ 1
После того, как вы установили прямоугольник экрана, сделайте что-то вроде следующего, чтобы решить, что выбрать, чтобы нарисовать изображение:
float hfactor = value.bounds.size.width / screenRect.size.width;
float vfactor = value.bounds.size.height / screenRect.size.height;
float factor = fmax(hfactor, vfactor);
// Divide the size by the greater of the vertical or horizontal shrinkage factor
float newWidth = value.bounds.size.width / factor;
float newHeight = value.bounds.size.height / factor;
// Then figure out if you need to offset it to center vertically or horizontally
float leftOffset = (screenRect.size.width - newWidth) / 2;
float topOffset = (screenRect.size.height - newHeight) / 2;
CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);
Если вы не хотите увеличивать изображения, меньшие, чем screenRect, убедитесь, что factor
больше или равно одному (например, factor = fmax(factor, 1)
).
Чтобы получить черный фон, вы, вероятно, просто хотите установить цвет контекста на черный и вызвать fillRect перед рисованием изображения.