我有一个 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/