문제

동일한 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"를 반복적으로 실행 하고이 일상적인 반복은 업데이트 된 매개 변수를 사용하여 레이어를 다시 주도합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top