zoukankan      html  css  js  c++  java
  • 将UIBezierPath存为自己定义格式的字符串,再将字符串转为UIBezierPath

    <pre name="code" class="objc">自己定义字符串格式为:@"123.02,234.23|321.23,432.0002|543.0003,432.0045|654.0034,567.0034|23.3443,56.0034|77.3440,55.3443|"
    
    
    
    
    /**
     *@brief:将BezierPath中的点转为字符串
     */
    + (NSString*)convertBezierPathToNSString:(UIBezierPath*) bezierPath;
    {
    
        NSString *pathString = @"";
    
        CGPathRef yourCGPath = bezierPath.CGPath;
        NSMutableArray *bezierPoints = [NSMutableArray array];
        CGPathApply(yourCGPath, (__bridge void *)(bezierPoints), MyCGPathApplierFunc);
        
        for (int i = 0; i < [bezierPoints count]; ++i)
        {
         
            CGPoint point = [bezierPoints[i] CGPointValue];
            pathString = [pathString stringByAppendingString:[NSString stringWithFormat:@"%f",point.x]];
            pathString = [pathString stringByAppendingFormat:@"%@",@","];
            pathString = [pathString stringByAppendingString:[NSString stringWithFormat:@"%f",point.y]];
            pathString = [pathString stringByAppendingString:@"|"];
    
        }
    
        return pathString;
    }
    
    
    void MyCGPathApplierFunc (void *info, const CGPathElement *element) {
        NSMutableArray *bezierPoints = (__bridge NSMutableArray *)info;
        
        CGPoint *points = element->points;
        CGPathElementType type = element->type;
        
        switch(type) {
            case kCGPathElementMoveToPoint: // contains 1 point
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
                break;
                
            case kCGPathElementAddLineToPoint: // contains 1 point
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
                break;
                
            case kCGPathElementAddQuadCurveToPoint: // contains 2 points
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
                break;
                
            case kCGPathElementAddCurveToPoint: // contains 3 points
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
                [bezierPoints addObject:[NSValue valueWithCGPoint:points[2]]];
                break;
                
            case kCGPathElementCloseSubpath: // contains no point
                break;
        }
    }
    
    
    
    <pre name="code" class="objc">
    /**
     *@brief:将字符串中的点转为BezierPath
     */
    + (UIBezierPath*)convertNSStringToBezierPath:(NSString*) bezierPathString
    {
        
        NSMutableArray *pointsArray = [[NSMutableArray alloc] init];
        NSInteger length = 0;
        
        //解析字符串
        NSString *separatorString1 = @",";
        NSString *separatorString2 = @"|";
        
        NSScanner *aScanner = [NSScanner scannerWithString:bezierPathString];
        
        while (![aScanner isAtEnd]) {
            
            NSString *xString, *yString;
            
            [aScanner scanUpToString:separatorString1 intoString:&xString];
            [aScanner setScanLocation:[aScanner scanLocation]+1];
            
            [aScanner scanUpToString:separatorString2 intoString:&yString];
            [aScanner setScanLocation:[aScanner scanLocation]+1];
            
    
            CGPoint point;
            point.x = [xString floatValue];
            point.y = [yString floatValue];
            
            [pointsArray addObject:[NSValue valueWithCGPoint:point]];
            
            
        }
        
        
        //首先将字符串解析为CGPoint数组,再将数组初始化UIBeizerPath
        length = [pointsArray count];
        UIBezierPath *bezierPath = [[UIBezierPath alloc] init];
        [bezierPath moveToPoint:[pointsArray[0] CGPointValue] ];
        for (NSUInteger j=1; j< length; j++) {
            [bezierPath addLineToPoint:[pointsArray[j] CGPointValue] ];
        }
        
        return bezierPath;
    }


    
    
  • 相关阅读:
    Apache+PHP配置过程详解以及常见问题
    Apache+php+mysql在windows下的安装与配置图解 写的还不错也算经典新手看看 熟手绕过
    squid和memcache区别
    转 Anaconda启动卡死的解决方案
    转 救命的教程 anaconda下载安装包网络错误的解决办法
    转 Anaconda环境管理
    转: opencv4.0.0 +opencv_contrib在vs2015中编译
    windows下pycharm使用Anaconda安装包环境
    美赛论文写作--写作规范
    Java--对象和引用 转载
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7207728.html
Copyright © 2011-2022 走看看