标签: calayer

如何禁用CALayer隐式动画?

这让我疯狂!我正在制作绘图应用程序.假设我正在制作一张UIView名片.

我在这个视图([sheet.layer addSublayer:...])中添加了一些子图层然后我想要绘制它们.为此,我正在创建一个CGImageRef并将其放入图层中contents.但它是动画的,我不希望这样.

我尝试了一切:

  • removeAnimationForKey:
  • removeAllAnimations
  • 设置动作字典
  • 使用动作层 delegate
  • [CATransaction setDisableAnimations:YES]

这似乎是正确的.我不明白为什么这个图层仍然是动画的; _;
难道我做错了什么?有秘密的方式吗?

animation calayer ios

37
推荐指数
6
解决办法
2万
查看次数

使用CALayer委托

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

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

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

iphone calayer

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

在uiview的右下角放一个阴影

我必须在uiview的右边和底部放一个阴影.我在界面构建器中执行此操作.但是我看到阴影掉到了顶部.已经有不同的大小.但是无法得到它.

layer.masksToBound=No
layer.shadowOpacity=0.15
layer.shadowRadius=2
layer.shadowOffSet={10,-10}   //Values being set in Interfacebuilder.
Run Code Online (Sandbox Code Playgroud)

仍然会在顶部留下阴影.我应该怎么做才能到达底部.

shadow calayer ios

33
推荐指数
2
解决办法
6万
查看次数

带有GradientLayer的UIButton会遮挡图像并使渐变变暗

我在这里有一个UIButton,我想在图像下面有一个渐变作为背景(带有透明背景的符号),但我面临着两个不同的问题.

无论我如何尝试添加它,CAGradientLayer的第一个似乎都覆盖在图像的顶部,完全遮盖了图像.

其次,渐变本身似乎变暗了很多,就像按钮被禁用一样,但事实并非如此.

这是我的代码:

self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 35, 28, 28)];
[backButton addTarget:self
               action:@selector(goBack)
     forControlEvents:UIControlEventTouchUpInside];
[backButton setBackgroundColor:[UIColor clearColor]];
CAGradientLayer *buttonGradient = [CAGradientLayer layer];
buttonGradient.frame = backButton.bounds;
buttonGradient.colors = [NSArray arrayWithObjects:
                         (id)[[UIColor colorWithRed:.0
                                              green:.166
                                               blue:.255
                                              alpha:1] CGColor], 
                         (id)[[UIColor colorWithRed:.0
                                              green:.113
                                               blue:.255
                                              alpha:1] CGColor], 
                         nil];
[buttonGradient setCornerRadius:backButton.frame.size.width / 2];
[backButton.layer insertSublayer:buttonGradient
                         atIndex:0];
[backButton setImage:[UIImage imageNamed:@"backarrow.png"]
            forState:UIControlStateNormal];
[backButton setEnabled:NO];
[topbarView addSubview:backButton];
Run Code Online (Sandbox Code Playgroud)

uibutton calayer ios cagradientlayer

31
推荐指数
3
解决办法
7430
查看次数

子视图出现在超级视图layer.border下面?

我有一个UIView我用以下方式定义它的边框:

self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 3;
Run Code Online (Sandbox Code Playgroud)

我附加了一个子视图UIView,当我将子视图移到边框上时,它会在它下面.这是预期的行为吗?反正有没有使子视图在它上面?

iphone cocoa-touch calayer uiview ios

31
推荐指数
1
解决办法
7526
查看次数

我什么时候需要设置CALayer的contentsScale属性?

文档中, Apple声明在以下情况下需要考虑图层的比例因子:

  • 创建具有不同比例因子的其他Core Animation图层,并将它们组合成自己的内容
  • 直接设置Core Animation图层的contents属性

最后的陈述对我来说并不完全清楚.他们还说:

直接使用Core Animation图层提供内容的应用程序可能需要调整其绘图代码以考虑比例因子.通常,当您在视图的drawRect:方法中绘制时,或者在图层委托的drawLayer:inContext:方法中绘制时,系统会自动调整图形上下文以考虑比例因子.

小规模还是永远?这仅适用于视图的托管后备层或我添加为后备层的子层的每个层?因为他们也说:

如果应用程序创建没有关联视图的图层,则每个新图层对象的比例因子最初都设置为1.0.如果不更改该比例因子,并且随后在高分辨率屏幕上绘制图层,则会自动缩放图层的内容以补偿比例因子的差异.如果您不希望缩放内容,可以将图层的比例因子更改为2.0,但如果您这样做而不提供高分辨率内容,则现有内容可能会显得比您预期的要小.要解决该问题,您需要为图层提供更高分辨率的内容.


我在想象一个没有视图的图层时遇到困难,我可以想象一下图层的层次结构,但是一旦我想要显示它们,我应该将它添加为视图背衬层的子层次结构,或者确实存在一些其他方法来使用它们(比如在上下文中创建和渲染)?

Core Animation的合成引擎查看每个图层的contentsScale属性,以确定在合成期间是否需要缩放该图层的内容.如果应用程序创建没有关联视图的图层,则每个新图层对象的比例因子最初都设置为1.0.如果不更改该比例因子,并且随后在高分辨率屏幕上绘制图层,则会自动缩放图层的内容以补偿比例因子的差异.如果您不希望缩放内容,可以将图层的比例因子更改为2.0,但如果您这样做而不提供高分辨率内容,则现有内容可能会显得比您预期的要小.要解决该问题,您需要为图层提供更高分辨率的内容.

这究竟意味着什么?当我做这样的事情时,layer.contents = (id)image.CGImage我需要设置contentsScale.
当我的图层绘制调用委托方法的内容drawLayer:inContext:并且图层不是视图的背景层时,是否还需要设置它 ?

macos objective-c calayer ios

31
推荐指数
3
解决办法
9829
查看次数

动画CALayer边框更改

我正在以这种方式将边框宽度和颜色设置为UIView子类:

- (void) setViewBorder
{
    self.layer.borderColor = [UIColor greenColor].CGColor;
    self.layer.borderWidth = 3.0f;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我怎样才能为此设置动画?谢谢.

objective-c calayer ios

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

如何在CALayer上进行转换?

在写这个问题之前,我已经

但是,我仍然无法理解如何在图层上进行基本变换.寻找翻译,旋转和缩放的解释和简单示例一直很困难.

今天我终于决定坐下来,做一个测试项目,然后把它们搞清楚.我的答案如下.

笔记:

  • 我只做Swift,但如果有人想要添加Objective-C代码,请成为我的客人.
  • 在这一点上,我只关心理解2D变换.

transform calayer ios swift

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

动画化CALayer子类的自定义属性

我有一个CALayer子类MyLayer,它有一个名为myInt的NSInteger属性.我真的想通过CABasicAnimation为这个属性设置动画,但似乎CABasicAnimation只适用于所谓的"动画"属性(边界,位置等).有什么我可以覆盖,以使我的自定义myInt属性可动画?

iphone core-animation calayer

30
推荐指数
2
解决办法
1万
查看次数

使用自动布局纵向和横向自定义UIView

我正在尝试使用新推出的iOS 6自动布局API构建一个相当简单的动画自定义UI.我正在构建的自定义视图有一个圆圈,我想要垂直和水平居中.

不幸的是我无法弄清楚为什么我的约束似乎对UIButton和UILabel元素工作正常,但是当我使用自定义视图和自定义CALayer(在这种情况下是一个圆圈,最终会被动画化)时会产生奇怪的结果.

要明确我不希望我的视图扩展以填充整个屏幕,而是要有动态的"填充",以便视图在iPhone 4和5上都垂直居中.我还应该注意到我非常Cocoa和UIKit的新手.

RootViewController.m:

...
- (void)viewDidLoad {
    [super viewDidLoad];

    // Create Circle View
    CGRect circle_view_rect = CGRectMake(0, 0, 100, 100);
    UIView *circle_view = [[UIView alloc] initWithFrame:circle_view_rect];

    // Create Circle Layer
    CircleLayer *circle_layer = [[CircleLayer alloc] init];
    circle_layer.needsDisplayOnBoundsChange = YES;
    circle_layer.frame = circle_view.bounds;
    [circle_view.layer addSublayer:circle_layer];

    // Enable Auto Layout
    [circle_view setTranslatesAutoresizingMaskIntoConstraints:NO];

    [self.view addSubview:circle_view];

    // Center Vertically
    NSLayoutConstraint *centerYConstraint =
    [NSLayoutConstraint constraintWithItem:circle_view
                attribute:NSLayoutAttributeCenterY
                relatedBy:NSLayoutRelationEqual
                   toItem:self.view
                attribute:NSLayoutAttributeCenterY
               multiplier:1.0
                 constant:0.0];
    [self.view addConstraint:centerYConstraint];

    // Center Horizontally
    NSLayoutConstraint *centerXConstraint =
    [NSLayoutConstraint constraintWithItem:circle_view
                attribute:NSLayoutAttributeCenterX …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch calayer uiview ios autolayout

30
推荐指数
2
解决办法
4万
查看次数