바둑판 식 배경 이미지 : UIImageView로 쉽게 할 수 있습니까?
타일링 된 전체 화면 배경 이미지가 있습니다. 즉, 큰 이미지를 만들려면 가로 및 세로로 몇 번 재생해야합니다. 못생긴 홈 페이지의 브라우저 에서처럼;)
UIImageView가 내 친구입니까?
나는 당신의 질문을 이해한다면 올바르게 사용할 수 있습니다 colorWithPatternImage:
에 UIColor
다음에 배경 색상을 설정합니다 UIView
.
를 사용해야하는 경우 UIImageView
동일한 작업을 수행 할 수 있지만 이미지보기에 배치하는 모든 이미지는 타일 이미지 앞에 그려집니다.
패턴 이미지와 함께 작동하도록 알파를 얻으려면 다음 세트가 있는지 확인하십시오.
view.backgroundColor = [UIColor colorWithPatternImage:aImage];
view.layer.opaque = NO;
수년 동안 Bill Dudney의 접근 방식을 사용했지만 iOS 6에는 훨씬 더 나은 솔루션이 있습니다. 그리고 ... 오늘 저는 이전 버전의 iOS에서도이 작업을 수행 할 수있는 방법을 찾았습니다.
- 새 클래스 "UIImage + Tileable"을 만듭니다 (아래에 소스 복사 / 붙여 넣기).
- 타일링 가능한 이미지로 UIImageView를 원하는 모든 클래스에서 가져옵니다. 카테고리이므로 표준 Apple 호출을 사용하여 모든 UIImage를 타일링 가능한 이미지로 "업그레이드"합니다.
- 이미지의 "바둑판 식 배열"버전을 원하면 "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 파일에서 배경 패턴을 설정할 수 있습니다.
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)!)
}
}
}
'Programing' 카테고리의 다른 글
Swift에서 현재 뷰 컨트롤러 클래스를 어떻게 확인합니까? (0) | 2020.12.03 |
---|---|
파이썬에서 "문자열"과 "문자열"사이에 차이가 있습니까? (0) | 2020.12.03 |
jQuery에 함수를 추가하는 방법은 무엇입니까? (0) | 2020.12.03 |
moq를 사용하여 일부 메서드 만 모의 (0) | 2020.12.03 |
면도기 파일 내에서 CSS @media를 어떻게 지정할 수 있습니까? (0) | 2020.12.03 |