Ios 将UIBezierPath替换为新的缩放路径
我有一个Ios 将UIBezierPath替换为新的缩放路径,ios,uitableview,uibezierpath,Ios,Uitableview,Uibezierpath,我有一个UITableViewCell,其中包含一个横跨单元格的UIBezierPath。当mytableview进入编辑模式时,移动单元格时,路径右端的一部分将离开屏幕。我的解决方案是在进入编辑模式时缩小路径,然后在退出编辑模式时将其缩放回原始大小。我尝试了一下,新的缩小路径出现了,但原来的更宽路径仍然可见。基本上,新的缩小路径绘制在原始的较宽路径上。如何在两条路径之间切换,使一条消失,另一条可见 - (void)didTransitionToState:(UITableViewCellSta
UITableViewCell
,其中包含一个横跨单元格的UIBezierPath
。当mytableview
进入编辑模式时,移动单元格时,路径右端的一部分将离开屏幕。我的解决方案是在进入编辑模式时缩小路径,然后在退出编辑模式时将其缩放回原始大小。我尝试了一下,新的缩小路径出现了,但原来的更宽路径仍然可见。基本上,新的缩小路径绘制在原始的较宽路径上。如何在两条路径之间切换,使一条消失,另一条可见
- (void)didTransitionToState:(UITableViewCellStateMask)state
{
[super didTransitionToState:state];
if (state == UITableViewCellStateShowingEditControlMask)
{
CGRect newFrame = CGRectMake(self.waveView.frame.origin.x, self.waveView.frame.origin.y, self.waveView.frame.size.width -100, self.waveView.frame.size.height);
//Using +100/-100 for testing
CGFloat scaleFactor = (self.waveView.frame.size.width-100)/self.waveView.frame.size.width;
self.waveView.frame = newFrame;
CGAffineTransform transform = CGAffineTransformScale(self.waveView.transform,
scaleFactor,
1);
[self.waveView.path applyTransform:transform];
}
else if (state ==UITableViewCellStateDefaultMask)
{
// normal mode : back to normal
CGRect originalFrame = CGRectMake(self.waveView.frame.origin.x, self.waveView.frame.origin.y, self.waveView.frame.size.width +100, self.waveView.frame.size.height);
CGFloat scaleFactor = (self.waveView.frame.size.width + 100)/self.waveView.frame.size.width;
self.waveView.frame = originalFrame;
CGAffineTransform transform = CGAffineTransformScale(self.waveView.transform,
scaleFactor,
1);
[self.waveView.path applyTransform:transform];
}
}
waveView是UIView的一个子类,具有以下特性:
@property (nonatomic, strong) CAShapeLayer* blueWave;
-(void) layoutSubviews
{
[super layoutSubviews];
self.blueWave = [self createShapeLayer];
[self.layer addSublayer:self.blueWave];
[self render];
}
- (void)render
{
self.blueWave.path = self.path.CGPath;
}
- (CAShapeLayer *) createShapeLayer
{
CAShapeLayer* layer = [[CAShapeLayer alloc] init];
layer.lineWidth = 2;
layer.fillColor = nil;
return layer;
}
在cellforrowatinex
中,我执行以下操作
cell.waveView.path = [NSKeyedUnarchiver unarchiveObjectWithData:pathData];
什么是waveView?它是UIView子类吗?@rdelmar是的。忘了提那个了。那个么路径是什么呢?这是您在waveView的drawRect方法中绘制的贝塞尔路径吗?我试图复制你的问题,但做不到。我在单元格中添加了一个名为WaveView的子视图,并在其drawRect方法中绘制了一条bezier路径。当我将单元格置于编辑模式时,路径会适当收缩,无需任何代码。@rdelmar因此,当您收缩路径时,只有一条路径可见?在
cellforrowatinexpath
I初始设置路径cell.waveView.path=[NSKeyedUnarchiver unarchiveObjectWithData:pathData]代码>然后当编辑模式启动时,我尝试缩小比例。是的,我只看到一条路径。我将waveView固定到单元格contentView的所有4个边上,因此当单元格进入编辑模式时,它会水平收缩。我没有显式地收缩路径——我没有使用任何代码来实现这一点。