Ios 如何向下层移动?

Ios 如何向下层移动?,ios,cashapelayer,Ios,Cashapelayer,我是CAShapeLayer新手。在我的应用程序中,我在scrollview中显示主题(CAShapeLayer)。当用户单击主题时,我想显示考试并设置scrollview的内容大小。我找到接触点,然后与每个主题进行比较。如果匹配,则显示考试。当我单击主题并尝试更改位置时,它向我显示了两次,而我只添加了一次。以下是我的触摸事件代码: - (void)singleTapGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer{ CGPoi

我是
CAShapeLayer
新手。在我的应用程序中,我在scrollview中显示主题(
CAShapeLayer
)。当用户单击主题时,我想显示考试并设置scrollview的内容大小。我找到接触点,然后与每个主题进行比较。如果匹配,则显示考试。当我单击主题并尝试更改位置时,它向我显示了两次,而我只添加了一次。以下是我的触摸事件代码:

- (void)singleTapGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer{
CGPoint touchPoint=[gestureRecognizer locationInView:self];
//take subviews of view
NSArray* subLayerArray = [self subLayerOfView];

BOOL showChildren = NO;
//compare touch point
for (int i = 0; i < subLayerArray.count; i++) {

    A3AddSubjectView* aAddSubject = [subLayerArray objectAtIndex:i];
    if (showChildren == YES) {
        int heightForSubject = 150*(i+1);
        aAddSubject.position = CGPointMake(aAddSubject.position.x, heightForSubject);
        aAddSubject.backgroundColor = [UIColor redColor].CGColor;
    }
    CGAffineTransform transf = CGAffineTransformMakeTranslation(-aAddSubject.position.x, - aAddSubject.position.y);
    if(CGPathContainsPoint(aAddSubject.path, &transf, touchPoint, NO)){
        if (aAddSubject.level == 0) {
            aAddSubject.level = 1;
        }
        else
            aAddSubject.level = 0;
        showChildren = YES;

        [self.delegate didSingleTapSubjectAtLevel:aAddSubject.level withIndex:i inView:self];
        NSDate* startDateOfSubject = [aAddSubject.startDate dateByAddingTimeInterval:19800];
        aAddSubject = [self.datasource selectSubjectAtLevel:aAddSubject.level withIndex:i inView:self];
        for (int j = 0; j < aAddSubject.children.count; j++) {
            NSMutableDictionary* dict = [aAddSubject.children objectAtIndex:j];
            NSDate* startDateOfExam = [[dict objectForKey:@"StartDate"] dateByAddingTimeInterval:19800];
            NSDate* endDateOfExam = [[dict objectForKey:@"EndDate"] dateByAddingTimeInterval:19800];
            int totalDaysBetweenExam = [self differenceBetweenTwoDatesFromDate:startDateOfExam toDate:endDateOfExam];
            CGFloat widthOfexam = totalDaysBetweenExam * dayWidth;
            //size
            CGSize sizeOfExam;
            sizeOfExam.width = widthOfexam;
            sizeOfExam.height = 10;
            //distance from origin
            int distanceFromOrigin = [self differenceBetweenTwoDatesFromDate:startDateOfSubject toDate:startDateOfExam] * dayWidth;
            A3ExamsView* aExamView = [[A3ExamsView alloc]init];
            [aExamView examWithTitle:[dict objectForKey:@"title"] withFont:[UIFont systemFontOfSize:20] withSize:sizeOfExam];
            aExamView.position = CGPointMake(distanceFromOrigin, 70*(j+1));
            [self.layer addSublayer:aExamView];
        }


    }
}
}
-(void)singleTapGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer{
CGPoint接触点=[手势识别器位置查看:自我];
//查看子视图
NSArray*子层RAY=[自身子层视图];
BOOL showChildren=NO;
//比较接触点
for(int i=0;i
欢迎来到堆栈溢出。请不要对你的问题做无用的改变(比如添加“请帮助我…”和“等待答复”),以吸引更多的注意力。相反,试着让你的问题更清楚,更容易理解。我想英语不是你的第一语言,这没关系,但我不明白你说的“它让我看两遍”是什么意思。两次显示的是什么?是的,你是对的@robmayoff,我在这里使用CAShapeLayer显示科目。如果用户单击科目,我需要显示该科目下的考试。由于考试在两个科目之间进行,所以我想向下移动其他科目。我通过改变位置来完成。但是当我改变位置时,它正在创建主题的第二个副本,它正在向下移动,第一个副本保持原样。我不知道你的代码有什么问题。我可以告诉您,如果您使用
UITableView
而不是
UIScrollView
,使每个主题都成为一行,那么总体而言,您的代码可能会更容易理解,并且工作得更好。您可以将检查添加到当前选定的单元格中,使该单元格根据需要动态升高。包含一个秘密咒语,您需要将更改设置为表格视图行高度的动画。这就是我的想法。我只想更改cashapelayer的位置,它也在移动,但不会从第一个位置移除。这看起来就像创建主题的第二个副本。