代码之家  ›  专栏  ›  技术社区  ›  Hamid

iPhone图像交换屏幕未更新

  •  0
  • Hamid  · 技术社区  · 14 年前

    @implementation draw2D
    
    
    - (id)initWithFrame:(CGRect)frame {
        if ((self = [super initWithFrame:frame])) {
            // Initialization code
            [self myTimer];
        }
        return self;
    }
    
    
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    - (void)drawRect:(CGRect)rect {
    // Drawing code
        [self updateBackground];
    }
    
    NSTimer *timer = nil;
    int count = 0;
    
    - (void)myTimer
    {
        timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateBackground) userInfo:nil repeats:NO];
        if (count < 1) {
            count++;
        } else {
            count = 0;
        }
    
    
    }
    
    - (void)updateBackground:
    {
        if(count == 1)
        {
            UIImage *myImage = [UIImage imageNamed:@"bg.png"];
            CGRect imageRect = CGRectMake(0, 0, 320, 480);
            [myImage drawInRect:imageRect];
            [myImage release];
        //  count++;
        } 
        else 
            if (count == 0) 
            {
                UIImage *myImage = [UIImage imageNamed:@"SCENE_002.png"];
                CGRect imageRect = CGRectMake(0, 0, 320, 480);
                [myImage drawInRect:imageRect];
                [myImage release];
        //      count = 0;
            }
        [self myTimer];
    }
    @end
    

    编辑:它显示第一个图像,但从不切换到第二个图像。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Chris    14 年前

    在第二个视图中,有两个方法调用updateBackground,一个是drawRect,它可以在更新显示时随时调用,另一个是计时器触发。在myTimer方法中,您正在更改计数值,预期屏幕将在0.5秒后刷新。

    我怀疑一个图像不显示的原因是它可能被绘制,但是调用drawInRect可能会触发drawrrect,然后它会使 其他 在最近绘制的图像上的图像。

    所以,基本上我会从drawRect中删除对updateBackground的调用:

    只有在必要时才调用[UIView drawRect]。在初始调用之后,UIKit只是在内部缓存结果,并继续将缓存的副本重绘到显示中。

    [self setNeedsDisplay];
    

    在updateBackground选择器中。

    另外,为什么每次触发后都要创建计时器,而不是将repeats参数更改为YES?