我有两个UIImageViews
占据了整个屏幕,这意味着它们的帧是:(0,0,320,480)。imageView2
在imageView1
之上。
它们都使用CAShapeLayer
应用于蒙版。我做了一个功能
-(void)addMask:(CGRect)rect toView:(UIImageView*)imageView
如下
//Function
-(void)addMask:(CGRect)rect toView:(UIImageView*)imageView {
CAShapeLayer * shapeLayer = [[CAShapeLayer alloc] init];
CGPathRef path = CGPathCreateWithRect(rect, NULL);
shapeLayer.path = path;
CGPathRelease(path);
imageView.layer.mask=shapeLayer;
imageView.layer.masksToBounds=YES;
}
我正在使用以下
UIImageViews
在viewDidAppear
中的CGRects
上应用掩码://In view did Appear
[self addMask:CGRectMake(0,0,160,480) toView:self.imageView];
[self addMask:CGRectMake(160,0,160,480) toView:self.imageView2];
因此,结果是屏幕被拆分成一半,左侧显示了一半
imageView1
,右侧显示了一半imageView2
。我有一个与
IBAction(buttonPressed:)
关联的按钮。我想要实现的是,当按下按钮时,增加
imageView1
的掩码,同时减小UIImageView2
的掩码:这样,左侧的imageView1
占据屏幕的75%,而右侧的imageView2
占据屏幕的25% 。我现在想做的是在下面的代码中,但是没有得到预期的结果://In IBAction
CGRect tmpRect ;
tmpRect = imageView1.layer.frame;
NSLog(@"Rect1 : %@",NSStringFromCGRect(tmpRect));
tmpRect.size.width+=20.0;
[self addMask:tmpRect toView:self.imageView];
tmpRect= imageView2.layer.frame;
NSLog(@"Rect2 : %@",NSStringFromCGRect(tmpRect));
tmpRect.origin.x+=20.0;
tmpRect.size.width-=20.0;
[self addMask:tmpRect toView:self.imageView2];
输出是
2013-08-26 13:15:41.753 imageMasking[16191:c07] Rect1 : {{0, 0}, {320, 460}}
2013-08-26 13:15:41.754 imageMasking[16191:c07] Rect2 : {{0, 0}, {320, 460}}
这是我要实现的目标的图片视图。
另外,稍后我想使用
panGesture
移动蒙版。那么,使用此功能拖动手指一千次时使用口罩是个好主意吗?除了我尝试实现的目标之外,还有其他选择吗?
谢谢
最佳答案
问题在于,在按下按钮时,您总是会转到layer.frame
,即图像视图的完整帧,而不是要遮罩的当前帧。您应该在属性中存储分割线的位置,就像CGFloat
一样,并且要修改遮罩时,请先更新此属性,然后使用它来计算新的遮罩路径。
除非有理由,否则您不必担心性能。即使用/测试告诉您您需要进行更改。然后,您应该进行概要分析以找出导致问题的原因,然后进行解决。
也就是说,您不必每次都需要创建一个新的形状图层,只需更新路径即可。