2

我有两个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;

}

我正在使用以下方法在UIImageViewsin上应用面具:viewDidAppearCGRects

//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. 那么,在使用此功能拖动手指时应用掩码一千次是个好主意吗?
是否有任何其他选择可以替代我想要实现的目标,因为我的方法可能完全错误。

谢谢

4

1 回答 1

2

问题是,在您按下按钮时,您总是会转到layer.frame图像视图的完整帧,而不是您要屏蔽的当前帧。您应该将分割线的位置存储CGFloat在属性中,就像 a 一样,并且当您想要修改掩码时,首先更新此属性,然后使用它来计算新的掩码路径。

在你有理由之前,你不应该担心性能。即使用/测试告诉你你需要做出改变。然后,您应该分析以找出导致问题的原因,然后进行处理。

也就是说,您不需要每次都创建新的形状图层,只需更新路径即可。

于 2013-08-26T09:09:48.283 回答