2015-12-19 5 views
4

В настоящее время с помощью:фонового изображения растянуть по вертикали, но повторение по горизонтали

self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.png")!) 

Но проблема состоит в том, что она повторяется как по вертикали, так и по горизонтали. Я стараюсь, чтобы он повторялся горизонтально, растягиваясь вертикально, чтобы соответствовать экрану.

+0

Можете ли вы прикрепить экран? Не совсем ясно, в чем проблема, с которой вы сталкиваетесь. –

+0

@LucasHuang Предположим, вы просматриваете приложение на iPad; вид намного выше, чем у iPhone. Изображение недостаточно велико, чтобы достичь нижней части обзора, чтобы оно повторялось вертикально. Я просто хочу растягиваться по вертикали, потому что он все равно должен повторяться горизонтально. – jq1106

+0

Вам нужно будет отрегулировать изображение, которое вы используете для шаблона, чтобы достичь того, чего вы хотите, но это взломать. –

ответ

1

Подкласс UIView называют это что-то вроде BackgroundImageView или что-то это переопределить drawInRect таким образом:

import UIKit 
@IBDesignable 
class BackgroundImageView: UIView { 
    @IBInspectable var backgroundImage:UIImage?{ 
     didSet{ 
      self.setNeedsDisplay() 
     } 
    } 

    override func drawRect(rect: CGRect) { 
     var i:CGFloat = 0.0 
     if backgroundImage != nil 
     { 
      while (i*backgroundImage!.size.width)<self.bounds.size.width 
      { 
       backgroundImage!.drawInRect(CGRect(x: i*backgroundImage!.size.width, y: 0.0, width: backgroundImage!.size.width, height: self.bounds.size.height)) 
       i+=1.0 
      } 
     } 
    } 


} 

Вытащите UIView в IB меняет свой класс на BackgroundImageView и устанавливает backgroundImage на background.png.

0

Вы можете попробовать изменить размер изображения в рамке, растягивая его по вертикали, но при этом он будет горизонтально горизонтально, а затем установите его так, как вы сейчас это делаете.

Насколько я знаю, нет встроенной настройки для растягивания на одной оси и повторения на другом.

Код может выглядеть примерно так:

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenHeight = screenRect.size.height; 

UIImage * targetImage = [UIImage imageNamed:@"background.png"]; 
UIView * yourView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, targetImage.size.width, screenHeight)]; 

// redraw the image 
UIGraphicsBeginImageContextWithOptions(yourView.frame.size, NO, 0.f); 
[targetImage drawInRect:CGRectMake(0.f, 0.f, targetImage.size.width, screenHeight)]; 
UIImage * resultImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext(); 

[self.view setBackgroundColor:[UIColor colorWithPatternImage:resultImage]]; 

Re-sizing the image

Getting screen size

Смежные вопросы