如何在UIView内部制作动画?

时间:2010-12-29 10:24:01

标签: objective-c cocoa-touch ios uiview

我的自定义UIView里面有一个二维数组。这个数组包含我使用drawRect方法在我的自定义UIView上绘制的像素。

现在我想用100步(或仅使用结果数组)更改此像素(我的2-dim数组)。如何将此效果设为动画?显示先前的状态然后显示实际状态没有问题,但我需要在这些状态之间进行动画。

感谢您的帮助。

祝你好运, WOJTEK

[更新,当天,14:15]

现在我用以下方式做到了:

- (void)calculate:(NSTimer *)timer {

int result = [myView calc];
if(result > 0)
{
    [NSTimer scheduledTimerWithTimeInterval:0.00001f
                                     target:self selector:@selector(calculate:)
                                   userInfo:nil
                                    repeats:NO];
}
[myView setNeedsDisplay];}

但它不太好,因为刷新使它非常慢。如果我刷新每2-4次计算,我的动画就不顺畅了。

我的绘图方法:

- (void)drawRect:(CGRect)rect{
int i = 0, j = 0;

CGContextRef myContext = UIGraphicsGetCurrentContext();


// ****************** drawing ********************
for(i = 0; i < 768; i++)
{
    for(j = 0; j < 768; j++)
    {
         if(board[i][j] == 1)
         {
             CGContextSetRGBFillColor (myContext, 1, 0, 0, 1);
             CGContextFillRect (myContext, CGRectMake (i, j, 1, 1));
         }
        else
        {
            CGContextSetRGBFillColor (myContext, 0, 0, 1, 1);
            CGContextFillRect (myContext, CGRectMake (i, j, 1, 1));
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

使用fill rect一次绘制一个像素需要一些时间。

我建议您将内存区域设置为要绘制的图像,然后使用CGImageCreate创建可以在UIView中绘制的图像。

例如使用参见

http://www.iphonedevsdk.com/forum/iphone-sdk-development/23525-cgimagecreate-alpha.html

http://iphonedevelopment.blogspot.com/2009/04/creating-uiimages-from-tga-data.html