Ios 将UIBezierPath替换为新的缩放路径

Ios 将UIBezierPath替换为新的缩放路径,ios,uitableview,uibezierpath,Ios,Uitableview,Uibezierpath,我有一个UITableViewCell,其中包含一个横跨单元格的UIBezierPath。当mytableview进入编辑模式时,移动单元格时,路径右端的一部分将离开屏幕。我的解决方案是在进入编辑模式时缩小路径,然后在退出编辑模式时将其缩放回原始大小。我尝试了一下,新的缩小路径出现了,但原来的更宽路径仍然可见。基本上,新的缩小路径绘制在原始的较宽路径上。如何在两条路径之间切换,使一条消失,另一条可见 - (void)didTransitionToState:(UITableViewCellSta

我有一个
UITableViewCell
,其中包含一个横跨单元格的
UIBezierPath
。当my
tableview
进入编辑模式时,移动单元格时,路径右端的一部分将离开屏幕。我的解决方案是在进入编辑模式时缩小路径,然后在退出编辑模式时将其缩放回原始大小。我尝试了一下,新的缩小路径出现了,但原来的更宽路径仍然可见。基本上,新的缩小路径绘制在原始的较宽路径上。如何在两条路径之间切换,使一条消失,另一条可见

- (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个边上,因此当单元格进入编辑模式时,它会水平收缩。我没有显式地收缩路径——我没有使用任何代码来实现这一点。