- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我按照以下方式编写代码时..
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeDifference);
sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor redColor].CGColor;
sublayer.opaque = NO;
sublayer.frame = CGRectMake(30, 30, 250, 200);
[sublayer renderInContext:context];
sublayer1 = [CALayer layer];
sublayer1.opaque = NO;
sublayer1.backgroundColor = [UIColor greenColor].CGColor;
sublayer1.frame = CGRectMake(120, 120, 100, 250);
[sublayer1 renderInContext:context];
}
我得到的第一张图片如下
子层、子层1的位置不正确,因为我已经为它们设置了框架。它们的交集是混合颜色。为什么他们不设置实际位置?
但是当我使用addSublayer
时,我得到了上面第二张图片。这里子层、子层1的位置是正确的。它们的交集不是混合颜色。就这样发生了什么事。
为什么我创建子图层是,当我拖动子图层时,它们的相交部分必须是混合颜色。请任何人给我解释一下。
提前致谢。
最佳答案
这就是代码中发生的情况:在第一种情况下,您只是在 View 底层的图形上下文中绘制图层。这就是drawRect 的作用。框架的原点不会影响这一点,因为它只是将子图层放置在其父图层内。但在这里,该图层永远不会添加到父图层中,因此原点根本不执行任何操作,并且两个形状都出现在 0, 0 处。
在第二种情况下,首先发生与之前完全相同的事情,但是因为您还将图层添加到图层层次结构中,所以它们在 View 底层的指定位置再次呈现。每个子图层都在其自己的上下文中渲染,因此您在drawRect中设置的混合模式对它们没有影响。
实际上,如果您只想获取两个矩形的图像,则根本不需要子图层。您可以直接在 View 底层的drawRect中绘制它们:
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(ctx, kCGBlendModeDifference);
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
CGRect rect1 = CGRectMake(30, 30, 250, 200);
CGContextFillRect(ctx, rect1);
CGContextSetFillColorWithColor(ctx, [UIColor greenColor].CGColor);
CGRect rect2 = CGRectMake(120, 120, 100, 250);
CGContextFillRect(ctx, rect2);
}
编辑(因为问题已被编辑):
您可以使用这种方法来拖动图层,如下所示:
关于iphone - addSublayer 和 renderInContext 在 iOS 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396541/
我正在尝试向我的 View 添加渐变,并将以下内容添加到 drawRect: CAGradientLayer *g = [[CAGradientLayer alloc]init]; g.frame =
我无法将 CAlayer 中的图像显示在 imageView 中。我可以让它与 CAGradientLayer 一起工作,但是当我将它更改为带有图像的 CALayer 时,似乎没有任何效果。如果框架被
我认为当我像这样添加一个 View 作为 subview 时: UIView* view = [[UIView alloc] init]; [self addSubview:view]; [view
我正在学习有关 Core Animation 书籍的教程,并尝试执行以下操作。 @interface ViewController () @property (nonatomic, weak) IBO
我写这段代码: let myAttributes = [ NSAttributedStringKey.font: UIFont(name: "Avenir-HeavyOblique", siz
如何在同一个 UIView 中正确使用这两个? 我有一个自定义子类 CALayer,我在其中绘制了 drawInContext 中的图案 我有另一个,我在其中设置了一个覆盖 PNG 图像作为内容。 我
问题 如何为您的图层创建单独的上下文并将该上下文合并到 super 图层中? 为什么我要这样做 我想将 View 层的绘制抽象为单独的对象/文件。我想用图层构建一个 View ,然后将其放置在另一个
当我按照以下方式编写代码时.. - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentConte
当我绘制图形并将其添加到 Controller 的 View 时,图形显示正确。 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; self.curre
我正在为 CAGradient 设置动画 let gradientChangeAnimation = CABasicAnimation(keyPath: "colors") gradientC
下面是我用来通过 -addSublayer 将 UIButton 添加到层的代码: CAGradientLayer * tile = [[tile alloc] init]; UIButto
我是一名优秀的程序员,十分优秀!