ios - CALayer - 在保持蒙版静止的同时平移图像

标签 ios core-graphics mask

我有一个 CALayer,它包含一个图像,上面有一个 mask 。

CALayer *firstLayer = [CALayer layer];

firstLayer.backgroundColor = [UIColor clearColor].CGColor;
firstLayer.frame =  curveView.frame;
firstLayer.position = CGPointMake(curveView.frame.origin.x + 100, curveView.frame.origin.y + 100);
firstLayer.name = @"FirstLayer";
[self.view.layer addSublayer:firstLayer];

CALayer *firstImageLayer = [CALayer layer];
firstImageLayer.frame = firstLayer.bounds;
firstImageLayer.masksToBounds = NO;   
firstImageLayer.name = @"FirstImageLayer";
firstImageLayer.contents = (id)first.CGImage;
[firstLayer addSublayer:firstImageLayer];

firstImageLayer.mask = [cM setMaskOnLayer:firstImageLayer :@"FirstColor" :&error];

我想平移/平移/拖动基础层中包含的图像,同时保持 mask 固定。 (有点像在固定窗口内查看图像)

  for (CALayer *subLayer in firstLayer.sublayers) {

    // p is the touch coordinate

/*First Thing I tried*/          
CAShapeLayer *mask = (CAShapeLayer *)subLayer.mask;
 mask.position = p;
/*Moves the mask, not the image*/


/*My second approach*/
     subLayer.frame = CGRectMake(subLayer.frame.origin.x + p.x, subLayer.frame.origin.y+p.y, subLayer.frame.size.width, subLayer.frame.size.height);
/*Moves the entire thing… image+mask - both*/


/*Final desperate approach*/
             for (CALayer *subLayer2 in subLayer.sublayers)
             {
                 sublayer2.position = p;
             }
/*Nothing happens*/
 }

帮帮我。

最佳答案

您是否尝试过将 ImageLayer 的逆变换应用于 MaskLayer ?

CALayer* imageLayer = ...;
 CALayer* maskLayer = ...;
 CGAffineTransform inverse = CGAffineTransformInvert(imageLayer.affineTransform);
 maskLayer.affineTransfrom = inverse; //assign everytime imageLayer move or change

关于ios - CALayer - 在保持蒙版静止的同时平移图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932156/

相关文章:

iOS 自动布局约束 : ignore hidden or zero-size view?

ios - 如何将标签添加到 textField 类或动画占位符

iphone - 如何以编程方式为黑/白 UIImageView 着色?

iphone - 以编程方式创建元素并重用代码

ios - 使用未声明的标识符 'FIRApp'

swift - 在一个上下文中绘制实线和虚线

ios - 如何使用 AirPrint 打印锁定的 pdf 文件

ios - Core Graphics 的转换矩阵与 iPad 的工作方式不同吗?

transparency - 如何在opencv-python中创建透明掩码

c++ - 使蒙版外全部透明