Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c -(void)drawRect:(CGRect)rect;几乎耗尽了iPhone所有的CPU -(void)drawRect:(CGRect)rect{ float sliceSize=rect.size.width/imagesShownAtOnce; //应用我们的剪裁区域并用黑色填充 [clippingRegion addClip]; [剪报填充]; //用我们的卷轴量绘制3幅图像(+1为中间图像)。 CGPoint-loc; 对于(int i=0;i_Objective C_Ios_Core Animation_Core Graphics - Fatal编程技术网

Objective c -(void)drawRect:(CGRect)rect;几乎耗尽了iPhone所有的CPU -(void)drawRect:(CGRect)rect{ float sliceSize=rect.size.width/imagesShownAtOnce; //应用我们的剪裁区域并用黑色填充 [clippingRegion addClip]; [剪报填充]; //用我们的卷轴量绘制3幅图像(+1为中间图像)。 CGPoint-loc; 对于(int i=0;i

Objective c -(void)drawRect:(CGRect)rect;几乎耗尽了iPhone所有的CPU -(void)drawRect:(CGRect)rect{ float sliceSize=rect.size.width/imagesShownAtOnce; //应用我们的剪裁区域并用黑色填充 [clippingRegion addClip]; [剪报填充]; //用我们的卷轴量绘制3幅图像(+1为中间图像)。 CGPoint-loc; 对于(int i=0;i,objective-c,ios,core-animation,core-graphics,Objective C,Ios,Core Animation,Core Graphics,将图形的每个组件绘制一次到某个对象(视图或图层)中,并让它保存缓存的图形。然后您只需移动或变换每个组件,正如您所说的,这一切都由GPU完成 您可以使用单个视图或单个层来执行此操作,但这并不重要(视图是一个层,在引擎盖下)。关键是,当您真正想要的是移动相同的持久块时,无需从头开始不断地重新绘制 了解CALayer将是一个好主意,因为它实际上是iOS上所有绘图的基础。还有什么比这更重要的呢?将绘图的每个组件一次性绘制到某个对象(视图或图层)中然后你只需移动或变换每个组件,就像你说的,这一切都是由GP

将图形的每个组件绘制一次到某个对象(视图或图层)中,并让它保存缓存的图形。然后您只需移动或变换每个组件,正如您所说的,这一切都由GPU完成

您可以使用单个视图或单个层来执行此操作,但这并不重要(视图是一个层,在引擎盖下)。关键是,当您真正想要的是移动相同的持久块时,无需从头开始不断地重新绘制


了解CALayer将是一个好主意,因为它实际上是iOS上所有绘图的基础。还有什么比这更重要的呢?

将绘图的每个组件一次性绘制到某个对象(视图或图层)中然后你只需移动或变换每个组件,就像你说的,这一切都是由GPU完成的

您可以使用单个视图或单个层来执行此操作,但这并不重要(视图是一个层,在引擎盖下)。关键是,当您真正想要的是移动相同的持久块时,无需从头开始不断地重新绘制


了解CALayer将是一个好主意,因为它实际上是所有在iOS上绘图的基础。还有什么比这更重要的呢?

我今天将尝试实现这一点!我不知道CALayers的行为就像它已经在GPU空间中绘图一样,并认为这将是徒劳的,因为我需要刷新每一帧的内容……但anks!不仅仅是CALayer,还有UIViews,因为UIView是CALayer(或CALayer的集合)。视图不包含自己的图形;它们只是层的可触摸包装。iOS绘图系统的全部要点——事实上,天才在于,一旦您绘制到视图(即层)中图形是缓存的,除非明确要求这样做,否则永远不会重新绘制。移动现有图形、拉伸它、变换它、更改其不透明度等都很便宜。此外,如果你正在制作动画,为什么不使用UIView动画或动画?它们也很便宜。你不应该自己重新绘制每一帧。或者,如果你正在用spri编写游戏tes,使用OpenGL。@RyanCopley:对于这两个填充,你会发现CAShapeLayer是相关的。我今天将尝试实现它!我不知道CALayers的行为就像它已经在GPU空间中绘制一样,并且认为这将是徒劳的,因为我需要在每一帧刷新所有内容…但是谢谢!不仅仅是CALayers,还有UIView,因为UIView是CALayer(或Calayer的集合)。视图不包含自己的绘图;它们只是图层的可触摸包装。iOS绘图系统的全部要点——事实上,天才在于,一旦您绘制到视图(即图层)中图形是缓存的,除非明确要求这样做,否则永远不会重新绘制。移动现有图形、拉伸它、变换它、更改其不透明度等都很便宜。此外,如果你正在制作动画,为什么不使用UIView动画或动画?它们也很便宜。你不应该自己重新绘制每一帧。或者,如果你正在用spri编写游戏tes,使用OpenGL。@RyanCopley:对于这两种填充,您会发现CAShapeLayer相关。
- (void)drawRect:(CGRect)rect{

    float sliceSize = rect.size.width / imagesShownAtOnce;
    //Apply our clipping region and fill it with black
    [clippingRegion addClip];
    [clippingRegion fill];

    //Draw the 3 images (+1 for inbetween), with our scroll amount.
    CGPoint loc;
    for (int i=0;i<imagesShownAtOnce+1;i++){
        loc = CGPointMake(rect.origin.x+(i*sliceSize)-imageScroll, rect.origin.y);
        [[buttonImages objectAtIndex:i] drawAtPoint:loc];
    }

    //Draw the text region background
    [[UIColor blackColor] setFill];
    [textRegion fillWithBlendMode:kCGBlendModeNormal alpha:0.4f];

     //Draw the actual text.
    CGRect textRectangle = CGRectMake(rect.origin.x+16,rect.origin.y+rect.size.height*4/5.6,rect.size.width/1.5,rect.size.height/3);
    [[UIColor whiteColor] setFill];
    [buttonText drawInRect:textRectangle withFont:[UIFont fontWithName:@"Avenir-HeavyOblique" size:22]];
}