gpt4 book ai didi

iphone - 通过 UIView 更改 MaskedLayer 的大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:22 25 4
gpt4 key购买 nike

我有两个占据整个屏幕的 UIImageViews,这意味着它们的帧是:(0,0,320,480)imageView2imageView1 之上。

它们都使用 CAShapeLayer 应用了 mask 。我做了一个函数

-(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;

}

我正在使用以下 CGRectsviewDidAppear 中的 UIImageViews 上应用蒙版:

//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}}

这是我要实现的目标的图片 View 。

enter image description here

稍后我想使用 panGesture 移动 mask 。那么,在使用此功能拖动手指的同时应用蒙版一千次是个好主意吗?
除了我想要实现的目标之外,还有其他选择吗,因为我的方法可能完全错误。

谢谢

最佳答案

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

除非有理由,否则您不应该担心性能。即使用/测试告诉您需要进行更改。然后,您应该进行概要分析以找出导致问题的原因,然后进行处理。

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

关于iphone - 通过 UIView 更改 MaskedLayer 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18439985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com