Programing

바둑판 식 배경 이미지 : UIImageView로 쉽게 할 수 있습니까?

lottogame 2020. 12. 3. 07:23
반응형

바둑판 식 배경 이미지 : UIImageView로 쉽게 할 수 있습니까?


타일링 된 전체 화면 배경 이미지가 있습니다. 즉, 큰 이미지를 만들려면 가로 및 세로로 몇 번 재생해야합니다. 못생긴 홈 페이지의 브라우저 에서처럼;)

UIImageView가 내 친구입니까?


나는 당신의 질문을 이해한다면 올바르게 사용할 수 있습니다 colorWithPatternImage:UIColor다음에 배경 색상을 설정합니다 UIView.

를 사용해야하는 경우 UIImageView동일한 작업을 수행 할 수 있지만 이미지보기에 배치하는 모든 이미지는 타일 이미지 앞에 그려집니다.


패턴 이미지와 함께 작동하도록 알파를 얻으려면 다음 세트가 있는지 확인하십시오.

view.backgroundColor = [UIColor colorWithPatternImage:aImage];
view.layer.opaque = NO;

수년 동안 Bill Dudney의 접근 방식을 사용했지만 iOS 6에는 훨씬 더 나은 솔루션이 있습니다. 그리고 ... 오늘 저는 이전 버전의 iOS에서도이 작업을 수행 할 수있는 방법을 찾았습니다.

  1. 새 클래스 "UIImage + Tileable"을 만듭니다 (아래에 소스 복사 / 붙여 넣기).
  2. 타일링 가능한 이미지로 UIImageView를 원하는 모든 클래스에서 가져옵니다. 카테고리이므로 표준 Apple 호출을 사용하여 모든 UIImage를 타일링 가능한 이미지로 "업그레이드"합니다.
  3. 이미지의 "바둑판 식 배열"버전을 원하면 "image = [image imageResizingModeTile]"을 호출합니다.

UIImage + Tileable.h

#import <UIKit/UIKit.h>

@interface UIImage (Tileable)

-(UIImage*) imageResizingModeTile;

@end

UIImage + Tileable.m

#import "UIImage+Tileable.h"

@implementation UIImage (Tileable)

-(UIImage*) imageResizingModeTile
{
    float iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

    if( iOSVersion >= 6.0f )
    {
        return [self resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile];
    }
    else
    {
        return [self resizableImageWithCapInsets:UIEdgeInsetsZero];
    }
}
@end

@Rivera 솔루션의 변형을 사용합니다.

UIView 확장에 다음을 넣으십시오.

- (void)setColorPattern:(NSString *)imageName
{
    [self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:imageName]]];
}

그런 다음 스토리 보드 / xib 파일에서 배경 패턴을 설정할 수 있습니다. 스토리 보드 / xib에서 colorPattern을 설정하는 방법을 보여주는 이미지


Interface Builder를 정말 좋아하기 때문에 UIImageView타일 ​​배경을 적용하기 위해이 하위 클래스를 만들었습니다 .

@interface PETiledImageView : UIImageView

@end

@implementation PETiledImageView

- (void)awakeFromNib
{
    [super awakeFromNib];

    UIImage * imageToTile = self.image;
    self.image = nil;
    UIColor * tiledColor = [UIColor colorWithPatternImage:imageToTile];
    self.backgroundColor = tiledColor;
}

@end

재정의를 시도 setImage:했지만 Nib 파일을 디코딩 할 때 IB가 호출하지 않는 것 같습니다.


In WWDC 2018 video session 219 - Image and Graphics Best Practices, Apple engineer explicitly recommends not to use the pattern color for tiling backgrounds:

I recommend not using patterned colors with a background color property on UIView. Instead, create a UIImageView. Assign your image to that image view. And use the functions on UIImageView to set your tiling parameters appropriately.

So the best and simplest way to create a tiled background would be like this:

imageView.image = image.resizableImage(withCapInsets: .zero, resizingMode: .tile)

Or even simpler, if you use asset catalog – select your pattern image asset and, in the Attributes inspector, enable Slicing (Horizontal/Vertical or both), set the insets to zero, and width/height to the dimensions of your image:

단순히 이미지보기에이 이미지를 할당 (인터페이스 빌더도 작동), 단지있는 UIImageView의를 설정하는 것을 잊지 마세요 contentMode.scaleToFill.


Daniel T 솔루션의 Swift 버전입니다. 여전히 IB에서 keyPath 값을 설정해야합니다. 물론 선택적 UIImage의 래핑을 더 조심스럽게 풀 수 있습니다.

extension UIView {
    var colorPattern:String {
        get {
            return ""  // Not useful here.
        }
        set {
            self.backgroundColor = UIColor(patternImage: UIImage(named:newValue)!)
        }
    }
}

참고 URL : https://stackoverflow.com/questions/1125230/tiled-background-image-can-i-do-that-easily-with-uiimageview

반응형