Calayer DrawInconText vs AddSublayer
-
06-07-2019 - |
문제
동일한 uiview에서 두 가지를 어떻게 올바르게 사용할 수 있습니까?
DrawInconText 내에 패턴을 그리는 하나의 사용자 정의 서브 클래스 Calayer가 있습니다.
오버레이 PNG 이미지를 내용으로 설정 한 또 다른 것이 있습니다.
나는 단지 배경 일뿐입니다.
이 3 가지 항목을 모두 어떻게 오버레이합니까?
[self.layer addSublayer:bottomLayer]; // this line is the problem
[squaresLayer drawInContext:viewContext];
[self.layer addSublayer:imgLayer];
다른 2는 내가 그 순서대로 그들을 할 경우 그 자체로 올바르게 그려집니다. 내가 어디를 가고 있든 상향식 레이어를 사용하든 항상 SquareSlayer가 그리는 것을 방지합니다. 3 개의 레이어가 필요한 이유는 백그라운드와 사용자 정의 레이어의 색상을 애니메이션하려는 것입니다. 상단 레이어는 그래픽 오버레이입니다.
해결책
누구나 자신의 내부 드로우 루틴이있는 스택 된 칼레이어를 애니메이션하려는 경우 코드를 붙여 넣을 수도 있습니다.
- (void)drawRect:(CGRect)rect {
[imgLayer removeFromSuperlayer];
CGFloat w = [self.blockViewDelegate w];
CGFloat h = [self.blockViewDelegate h];
CGFloat wb = w/4;
CGFloat hb = h/4;
CGContextRef viewContext = UIGraphicsGetCurrentContext();
// Layers
[bottomLayer sizes:wb :hb :1];
bottomLayer.frame = CGRectMake(0, 0, w, h);
bottomLayer.opaque = NO;
[topLayer sizes:wb :hb :0];
topLayer.frame = CGRectMake(0, 0, w, h);
topLayer.opaque = NO;
// Overlay
imgLayer.frame = CGRectMake(0, 0, w, h);
imgLayer.opaque = NO;
imgLayer.opacity = 1.0f;
UIImage *overlay = [self.blockViewDelegate image];
CGImageRef img = overlay.CGImage;
imgLayer.contents = (id)img;
// Add layers
[bottomLayer drawInContext:viewContext];
[topLayer drawInContext:viewContext];
[self.layer addSublayer:imgLayer];
}
BlockViewDelegate는 너비, 높이 및 이미지 정보를 저장하는 곳 이며이 UIView의 컨트롤러입니다.
Toplayer와 BottleLayer는 가변 색상 정보로보기에 일부 모양을 그린 사용자 정의 UIView 서브 클래스입니다. 나중에 내 애니메이션에서 나는 타이머로 "setneedsdisplay"를 반복적으로 실행 하고이 일상적인 반복은 업데이트 된 매개 변수를 사용하여 레이어를 다시 주도합니다.
제휴하지 않습니다 StackOverflow