developer tip

UIView의 배경 이미지를 채우는 방법

optionbox 2020. 11. 9. 08:02
반응형

UIView의 배경 이미지를 채우는 방법


나는 UIView이 방식으로 배경 이미지를 설정했습니다.

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];

내 문제는 배경 이미지가 뷰의 중앙에 있지 않지만 모든 뷰를 채우기 위해 몇 번 재생된다는 것입니다. uiview 내부에 이미지를 중앙에 배치하고 화면 크기를 조정하는 방법이 있습니까?

참고 : UIImageView배경에 사용할 수 없습니다 scrollview.


중앙에 늘어난 이미지를 만들려면 미리 이미지를 처리해야합니다. 이 시도:

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

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

들어 스위프트 이것을 사용 ...

UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "ImageName.png")?.draw(in: self.view.bounds)

if let image = UIGraphicsGetImageFromCurrentImageContext(){
    UIGraphicsEndImageContext()
    self.view.backgroundColor = UIColor(patternImage: image)
}else{
    UIGraphicsEndImageContext()
    debugPrint("Image not available")
 }

colorWithPattern:방법은 실제로 이미지에서 패턴을 생성하는 것입니다. 따라서 필요한 사용자 정의가 불가능할 가능성이 높으며 그렇게 할 수도 없습니다.

실제로 UIImageView이미지를 중앙에 배치하고 크기를 조정하려면를 사용해야합니다 . 당신이 가지고 있다는 사실 UIScrollView이 이것을 막지는 않습니다.

확인 self.view후 모두 추가, 일반적인 전망 UIImageView과를 UIScrollView파단한다. Interface Builder에서 모두 올바르게 연결되어 있는지 확인하고 스크롤 뷰의 배경색을 투명하게 만드십시오.

이것은 IMHO가 미래의 변화를위한 가장 간단하고 유연한 디자인입니다.


반복:

UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];

뻗어

UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;

Swift 2.1의 경우 이것을 사용하십시오 ...

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "Cyan.jpg")?.drawInRect(self.view.bounds)

    let image: UIImage! = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

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

Swift 4 에서하는 올바른 방법 , 화면 크기와 같은 프레임이 올바른 경우 다른 곳에 두십시오. viewDidLayoutSubviews실제 프레임을 가져올 수 있으므로 이것을 작성하는 것이 중요합니다 .viewDidLayoutSubviews

   override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        UIGraphicsBeginImageContext(view.frame.size)
        UIImage(named: "myImage")?.draw(in: self.view.bounds)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        view.backgroundColor = UIColor.init(patternImage: image!)
    }

UIGraphicsBeginImageContext 메서드를 사용하여보기와 동일한 이미지 크기를 설정할 수 있습니다 .

구문 : 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")];

Swift 3.0의 경우 다음 코드를 사용하십시오.

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "bg.png")?.drawAsPattern(in: self.view.bounds)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    self.view.backgroundColor = UIColor(patternImage: image)

The marked answer is fine, but it makes the image stretched. In my case I had a small tile image that I wanted repeat not stretch. And the following code was the best way for me to solve the black background issue:

UIImage *tileImage = [UIImage imageNamed:@"myTileImage"];
UIColor *color = [UIColor colorWithPatternImage:tileImage];
UIView  *backgroundView = [[UIView alloc] initWithFrame:self.view.frame];
[backgroundView setBackgroundColor:color];
//backgroundView.alpha = 0.1; //use this if you want to fade it away.
[self.view addSubview:backgroundView];
[self.view sendSubviewToBack:backgroundView];

Swift 4 Solution :

@IBInspectable var backgroundImage: UIImage? {
    didSet {
        UIGraphicsBeginImageContext(self.frame.size)
        backgroundImage?.draw(in: self.bounds)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        if let image = image{
            self.backgroundColor = UIColor(patternImage: image)
        }
    }
}

참고URL : https://stackoverflow.com/questions/8077740/how-to-fill-background-image-of-an-uiview

반응형