После того, как вы установите прямоугольник экрана, сделайте что-то вроде следующего, чтобы решить, в какой прямоугольник рисовать изображение:
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 перед рисованием изображения.