2012-04-03 43 views
34

Tôi muốn có một UIImage làm hình nền trên UIView.iOS UIView Background Image

Đây là mã của tôi:

UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login.png"]]; 
self.view.backgroundColor = background; 
[background release]; 

Vấn đề là, rằng quy mô là không ổn. Nó thu nhỏ 640 đến 480, vì vậy tôi không thể nói chắc chắn 100% nhưng có vẻ như chỉ 300 đến 250 được hiển thị hoặc một cái gì đó như thế.

Có phù hợp để mở rộng/vừa với UIView/vừa với modus kích thước không?

+0

Kích thước của PNG gốc là gì? Bạn cũng đang xem thiết bị này trên thiết bị võng mạc? –

Trả lời

7

Theo UIColor API:

Bạn có thể sử dụng màu sắc mô hình để thiết lập các điền hoặc đột quỵ màu cũng giống như bạn sẽ là một màu đồng nhất. Trong khi vẽ, hình ảnh trong mẫu màu được lát gạch khi cần thiết để che khu vực đã cho.

Điều đó có nghĩa là nó cố gắng tạo mẫu ra khỏi hình ảnh của bạn để lấp đầy khu vực. Tôi nghĩ rằng cách tối ưu để làm điều đó là để rescale hình ảnh của bạn để phù hợp với chính xác kích thước UIView.

Có một câu trả lời tốt đẹp ở đây làm thế nào để thay đổi kích thước hình ảnh của bạn trong thời gian chạy:

The simplest way to resize an UIImage?

27

chào thử này,

 self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]]; 
+0

Không hoạt động ... – Kovu

+1

câu trả lời hay nhất, rõ ràng và hoạt động ngay lập tức. Hoàn hảo cho một nghiên cứu nhanh. – Heckscheibe

+0

Không hoạt động chính xác. – bapi

12

Chỉ định một nền thực tế và gửi nó vào mặt sau của cái nhìn của bạn

//add background 
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]]; 
[myView addSubview:background]; 
[myView sendSubviewToBack:background]; 
myView.contentMode = UIViewContentModeScaleAspectFit; 
48

bạn được yêu cầu để xử lý hình ảnh của bạn trước khi bạn thêm hình ảnh, hãy thử điều này:

UIGraphicsBeginImageContext(self.view.frame.size); 
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.view.backgroundColor = [UIColor colorWithPatternImage:image]; 
+0

Cảm ơn bạn, nó làm việc tốt cho tôi – swiftBoy

+0

Đây là cách chính xác nhất để làm ... làm việc cho tôi .. Cảm ơn. – bapi

+2

nhanh: https://gist.github.com/asiviero/c9e63b3607bf58373cab – asiviero

0
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]; 
self.view.backgroundColor = background; 
[background release]; 
1

Trong bộ dựng giao diện, hãy thêm Image View vào View và chọn hình ảnh bạn muốn sử dụng trong Attributes inspector. Cuối cùng, tạo Image View đứa con đầu tiên của số View bằng cách kéo phần tử trong Document Outline.

0

Nếu quan điểm là sẽ có cùng kích thước, bạn có thể đặt một phương pháp trong AppDelegate.m bạn rằng quy mô hình nền trên chạy đầu tiên, và sau đó giữ hình ảnh thu nhỏ trong bộ nhớ để sử dụng trong tương lai:

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]; 
} 

Nhờ @uneakharsh vì sự giúp đỡ của anh ấy!

6

Và nếu bạn muốn làm điều đó trong nhanh chóng:

self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg")) 
+0

và có, tôi muốn thực hiện điều đó trong Swift: D –

-1
this.View.BackgroundColor = UIColor.FromPatternImage (UIImage.FromFile ("body_background.png")); 
0

Bạn có thể sử dụng UIGraphicsBeginImageContext phương pháp để thiết lập kích thước của hình ảnh tương tự mà xem.

Cú pháp: void UIGraphicsBeginImageContext (CGSize size);

#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")]; 
9

Trong Swift sử dụng này ...

UIGraphicsBeginImageContext(self.view.frame.size) 
    UIImage(named: "1.png")?.drawInRect(self.view.bounds) 

    var image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    self.view.backgroundColor = UIColor(patternImage: image) 
2

Tôi đang sử dụng phần mở rộng sau trong 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) 
    } 
} 

Trong mã bạn có thể sử dụng như thế này:

if let image = UIImage(named: "HomeBg"){ 
     self.view.setBackgroundImage(image) 
    } 
0

Tôi cũng muốn làm điều này và tôi thấy rằng, do autolayout, các UIImageView trải dài các chứa UIView, khi tôi muốn nó theo cách khác: Tôi muốn UIImageView để lấy kích thước của UIView.

Vì vậy, tôi đã tạo lớp này. Nó cập nhật khung UIImageView theo hộp chứa UIView bất cứ khi nào được đặt qua 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:)") } 
} 
Các vấn đề liên quan