相关疑难解决方法(0)

在 - [CALayer setNeedsDisplayInRect:]中禁用隐式动画

我的-drawInContext:方法中有一个包含一些复杂绘图代码的图层.我正在尝试最小化我需要做的绘图量,所以我使用-setNeedsDisplayInRect:仅更新已更改的部分.这是非常好的工作.但是,当图形系统更新我的图层时,它会使用交叉淡入淡出从旧图像过渡到新图像.我希望它能立即切换.

我已经尝试使用CATransaction来关闭操作并将持续时间设置为零,并且都不起作用.这是我正在使用的代码:

[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

我应该使用不同的CATransaction方法(我也尝试过-setValue:forKey:使用kCATransactionDisableActions,结果相同).

iphone core-animation calayer ios

133
推荐指数
9
解决办法
5万
查看次数

iOS:使用UIView的'drawRect:'与其图层的委托'drawLayer:inContext:'

我有一个类,它是一个子类UIView.我可以通过实现drawRect方法或通过实现drawLayer:inContext:哪个是委托方法在视图中绘制内容CALayer.

我有两个问题:

  1. 如何决定使用哪种方法?每个都有一个用例吗?
  2. 如果我实现drawLayer:inContext:,它被调用(并且drawRect不是,至少就断点可以告诉),即使我没有CALayer通过使用以下方式将我的视图指定为委托:

    [[self layer] setDelegate:self];

    如果我的实例未被定义为图层的委托,那么如何调用委托方法?什么机制可以防止drawRectdrawLayer:inContext:调用?

iphone delegates core-animation ios

72
推荐指数
5
解决办法
4万
查看次数

使用CALayer委托

我有一个UIView,其图层将有子图层.我想为每个子图层分配代理,因此委托方法可以告诉图层要绘制什么.我的问题是:

作为CALayer的代表,我应该提供什么?文档说不要使用层所在的UIView,因为这是为视图的主CALayer保留的.但是,创建另一个类只是为了成为我创建的CALayers的代表,这就失去了不继承CALayer的目的.人们通常使用什么作为CALayer的代表?或者我应该只是亚类?

另外,为什么实现委托方法的类不必遵循某种CALayer协议?这是一个我不太了解的更广泛的首要问题.我认为所有需要实现委托方法的类都需要协议规范,以便实现者遵守.

iphone calayer

34
推荐指数
3
解决办法
2万
查看次数

如何使用CAShapeLayer使我的UIBezierPath动画?

我正在尝试为UIBezierPath制作动画,我已经安装了CAShapeLayer来尝试这样做.不幸的是,动画不起作用,我不确定任何层是否有任何影响(因为代码在我拥有图层之前做了同样的事情).

这是实际的代码 - 会喜欢任何帮助.Draw2D是UIView的一个实现,它嵌入在UIViewController中.所有绘图都在Draw2D类中进行.对[_helper createDrawing ...]的调用只是用点填充_uipath变量.

Draw2D.h定义了以下属性:

#define defaultPointCount ((int) 25)

@property Draw2DHelper *helper;
@property drawingTypes drawingType;
@property int graphPoints;
@property UIBezierPath *uipath;

@property CALayer *animationLayer;
@property CAShapeLayer *pathLayer;

- (void)refreshRect:(CGRect)rect;
Run Code Online (Sandbox Code Playgroud)

以下是实际实施:

//
//  Draw2D.m
//  Draw2D
//
//  Created by Marina on 2/19/13.
//  Copyright (c) 2013 Marina. All rights reserved.
//

#import "Draw2D.h"
#import"Draw2DHelper.h"
#include <stdlib.h>
#import "Foundation/Foundation.h"
#import <QuartzCore/QuartzCore.h>

int MAX_WIDTH;
int MAX_HEIGHT;

@implementation Draw2D

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization …
Run Code Online (Sandbox Code Playgroud)

core-animation cashapelayer ios

15
推荐指数
1
解决办法
3万
查看次数

标签 统计

core-animation ×3

ios ×3

iphone ×3

calayer ×2

cashapelayer ×1

delegates ×1