Фокусное изображение iOS UIView
Я хочу иметь UIImage
в качестве фонового изображения на UIView.
Вот мой код:
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login.png"]];
self.view.backgroundColor = background;
[background release];
Проблема в том, что шкала не в порядке. Он масштабируется от 640 до 480, поэтому я не могу сказать это на 100% уверенно, но похоже, что отображается только от 300 до 250 или что-то в этом роде.
Есть ли пригодность для масштабирования/соответствия UIView/fit для размера modus?
Ответы
Ответ 1
В соответствии с API UIColor
:
Вы можете использовать цвета шаблонов, чтобы установить цвет заливки или штриха так же, как и сплошной цвет. Во время рисования изображение в цвете шаблона разбивается по мере необходимости, чтобы покрыть данную область.
Это означает, что он пытается создать шаблон из вашего изображения, чтобы заполнить область. Я думаю, что оптимальный способ сделать это - это масштабировать ваше изображение, чтобы оно соответствовало размеру UIView
.
Здесь есть приятный ответ о том, как изменить размер изображения во время выполнения:
Самый простой способ изменить размер UIImage?
Ответ 2
вам необходимо обработать изображение перед его добавлением, попробуйте следующее:
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
Ответ 3
привет, попробуйте это,
self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];
Ответ 4
Укажите фактический фон и отправьте его на задний план.
//add background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
[myView addSubview:background];
[myView sendSubviewToBack:background];
myView.contentMode = UIViewContentModeScaleAspectFit;
Ответ 5
В Swift используйте это...
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "1.png")?.drawInRect(self.view.bounds)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
Ответ 6
И если вы хотите сделать это быстро:
self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))
Ответ 7
Я использую следующее расширение в Swift:
extension UIView{
func setBackgroundImage(img: UIImage){
UIGraphicsBeginImageContext(self.frame.size)
img.drawInRect(self.bounds)
let patternImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.backgroundColor = UIColor(patternImage: patternImage)
}
}
В коде вы можете использовать следующее:
if let image = UIImage(named: "HomeBg"){
self.view.setBackgroundImage(image)
}
Ответ 8
В построителе интерфейса добавьте Image View
в View
и выберите изображение, которое вы хотите использовать в Attributes inspector
. Наконец, сделайте Image View
самым первым дочерним элементом View
, перетащив элемент в Document Outline
.
Ответ 9
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
self.view.backgroundColor = background;
[background release];
Ответ 10
Если вид будет иметь тот же размер, вы можете поместить метод в свой AppDelegate.m
, который масштабирует фоновое изображение при первом запуске, а затем сохраняет масштабированное изображение в памяти для будущего использования:
UIImage *backgroundImage = nil;
- (void)setBackground:(UIView *)view
{
if (backgroundImage == nil)
{
UIGraphicsBeginImageContext(view.frame.size);
[[UIImage imageNamed:@"Background"] drawInRect:view.bounds];
backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
}
Спасибо @uneakharsh за помощь!
Ответ 11
Вы можете использовать метод UIGraphicsBeginImageContext, чтобы установить размер изображения таким же, как и у просмотра.
Синтаксис: void UIGraphicsBeginImageContext (размер CGSize);
#define IMAGE(imageName) (UIImage *)[UIImage imageWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:imageName ofType:IMAGE_TYPE_PNG]]
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"MyImage.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:IMAGE(@"mainBg")];
Ответ 12
Я также хотел сделать это, и я обнаружил, что из-за автоотключения UIImageView
растягивает содержащую UIView
, когда я хочу это другим способом: я хочу, чтобы UIImageView
принял размер UIView
.
Итак, я создал этот класс. Он обновляет кадр UIImageView
в соответствии с контейнером UIView
, когда он выложен через layoutSubviews
.
/**
* View with an image whose frame is adjusted to the frame of the view.
*/
class ViewWithImage: UIView {
let image: UIImageView
init(image: UIImageView) {
self.image = image
super.init(frame: .zero)
self.addSubview(image)
}
override func layoutSubviews() {
super.layoutSubviews()
updateImageFrame()
}
private func updateImageFrame() {
image.frame = CGRect(origin: .zero, size: self.frame.size)
}
required init?(coder: NSCoder) { fatalError("no init(coder:)") }
}
Ответ 13
this.View.BackgroundColor = UIColor.FromPatternImage (UIImage.FromFile ("body_background.png"));