zoukankan      html  css  js  c++  java
  • CorePlot学习六---点击scatterPlot中的symbol点时弹出对应的凝视

    因为项目须要用到用户点击 symbol时,弹出对应的具体信息,发现国内解说的比較少,经过一番搜索验证最终解决,先看效果图:

    详细须要改动的代码例如以下:

    首先要引用托付方法:CPTScatterPlotDelegate、CPTPlotSpaceDelegate

    完毕例如以下:

    #pragma mark -
    #pragma mark CPTPlotSpaceDelegate methods
    -(BOOL)plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceCancelledEvent:(UIEvent *)event
    {
        return YES;
    }
    -(BOOL)plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceUpEvent:(UIEvent *)event atPoint:(CGPoint)point
    {
        return YES;
    }
    -(BOOL)plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceDownEvent:(UIEvent *)event atPoint:(CGPoint)point
    {
        NSLog(@"you putdown at point:%@",[NSValue valueWithCGPoint:point]
    );
        return YES;
    }
    -(BOOL)plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceDraggedEvent:(UIEvent *)event atPoint:(CGPoint)point
    {
        return YES;
    }
    
    #pragma mark - 
    #pragma mark CPTScatterPlotDelegate
    //当我们选择对应的点时。弹出凝视:
    <span style="color:#FF0000;">-(void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)idx withEvent:(UIEvent *)event
    {
    </span>    if ( symbolTextAnnotation ) {
            [xyGraph.plotAreaFrame.plotArea removeAnnotation:symbolTextAnnotation];
            symbolTextAnnotation = nil;
        }
        // Setup a style for the annotation
        CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle];
        hitAnnotationTextStyle.color    = [CPTColor greenColor];
        hitAnnotationTextStyle.fontSize = 10.0f;
        hitAnnotationTextStyle.fontName = @"Helvetica-Bold";
        
        // Determine point of symbol in plot coordinates
        NSNumber *x          =
        [[datasForPlot objectAtIndex:idx] valueForKey:@"x"];
        NSNumber *y          = [[datasForPlot objectAtIndex:idx] valueForKey:@"y"];
        NSString *date = [[datasForPlot objectAtIndex:idx]valueForKey:@"date"];
        
        NSArray *anchorPoint = [NSArray arrayWithObjects:x, y, nil];
        // Add annotation
        // First make a string for the y value
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setMaximumFractionDigits:2];
        NSString *yString = [formatter stringFromNumber:y];
        NSString *myString = [NSString stringWithFormat:@"温度:%@
    日期:%@
    事件:%@",yString,date,nil];
        
        // Now add the annotation to the plot area
        CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:myString/*yString*/ style:hitAnnotationTextStyle];
        symbolTextAnnotation              = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:xyGraph.defaultPlotSpace anchorPlotPoint:anchorPoint];
        symbolTextAnnotation.contentLayer = textLayer;
        symbolTextAnnotation.displacement = CGPointMake(0.0, 20.0);
        [xyGraph.plotAreaFrame.plotArea addAnnotation:symbolTextAnnotation];
    
    
       // NSLog(@"index:%lu,event:%@",(unsigned long)idx,event);
    }
    
    千万别忘记了依据自定义的设置对应的delegate = self;

    红色标注的就是我们实现该功能的重点

    对了。忘记说一点,该点很重要。不然你手指点击不灵活。我们的symbol那么小。还要点击到它的中心才干触发以下的方法,这多难啊,有个參数设置一下就搞定了,设置它的触发范围:

        CPTScatterPlot *boundLinePlot = [[CPTScatterPlot alloc]init];
        boundLinePlot.<span style="color:#FF0000;">plotSymbolMarginForHitDetection</span> = 5.0f;//设置symbol点的外沿范围。以用来检測手指的触摸
    
    ok搞定


    其它的看凝视。不想再多加说明了

    代码传送门:http://download.csdn.net/detail/u012951123/7521733

  • 相关阅读:
    关于Java中String类的hashCode方法
    重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源
    vue+eslint+prettier+vetur 使用vscode 前端工程化
    vue webpack 打包优化
    移动端兼容
    vue 跨域使用
    vue2.0性能优化
    前端 mock的使用
    vue 使用Lodash 的throttle(节流)与debounce(防抖
    webpack4 安装及使用
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6956414.html
Copyright © 2011-2022 走看看