2013-04-03 84 views
2

我目前正在研究一個基於圖形的iOS應用程序。爲此,我使用名爲F3PlotStrip的第三方控件。F3PlotStrip動態添加圖有問題

和實施這樣的:

- (void)viewDidLoad 
{ 
    _ecgView = [[F3PlotStrip alloc] initWithFrame:CGRectMake(50, 50, 648, 299)]; 
    _ecgView.lineColor = [UIColor greenColor]; 
    _ecgView.lowerLimit = -10.0f; 
    _ecgView.upperLimit = 10.0f; 
    [self.view addSubview:_ecgView]; 
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testGraph:) userInfo:nil repeats:YES]; 
} 

- (void)testGraph:(NSTimer *)a_timer 
{ 
    _ecgView.value = 1.0; 
} 

但我得到的結果是這樣的:

Code F3

然後我在xib增加了UIView並改變了它的類F3PlotStrip然後連接它到_ecgView

然後我變了樣代碼:

- (void)viewDidLoad 
{ 
    _ecgView.lineColor = [UIColor greenColor]; 
    _ecgView.lowerLimit = -10.0f; 
    _ecgView.upperLimit = 10.0f; 
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testGraph:) userInfo:nil repeats:YES]; 
} 

- (void)testGraph:(NSTimer *)a_timer 
{ 
    _ecgView.value = 1.0; 
} 

這個時候,我得到了實際的輸出:

IB F3

但爲什麼當我通過代碼添加視圖的問題是怎麼回事?我不能依賴第二種方法(通過IB),因爲我需要動態添加圖形。無論如何解決這個問題?或者這是F3PlotStrip的錯誤?

回答

1

我今天早上開始使用這個小部件。我現在在我的iPhone上睡覺,所以不能發佈我想要發佈的內容,但是當我在早上上班時,我會。

我已經設法使用它,並做你想要做什麼動態添加UIView,或者我應該說,F3PlotStrip。

我也做了.h和.m,ARC兼容。不知道你是否做到了。

明天我會用一些很好的代碼來完成,它使用NSTimer讀取NSArray的內容以動態繪製動畫。再次以視圖添加到我的viewcontroller作爲子視圖。

沒有詳細看過你的代碼,發佈了我明天工作的內容。

好吧 - 我在這裏工作,坐在Xcode的前面。這是我用來作爲這個小部件的基本測試平臺的VC。我昨晚很快就把它撞倒了,但是完成了這項工作。最初,我已經將一個UIView添加到了我的Storyboard的第一個VC中,並將其分類到F3PlotStrip。但是,鑑於我看到你在動態添加UIView時遇到問題,我想我會放棄它。你和我的唯一區別就是我在alloc-init之後設置了UIView的框架。看看你的想法。它使用Sparkline方法並將圖形動畫顯示在屏幕上。

// 
// PlotViewController.m 
// PlotTest 
// 
// Created by Carl Hine on 16/05/2013. 
// Copyright (c) 2013 Carl Hine. All rights reserved. 
// 

#define COLOUR_POWDER_BLUE     [[UIColor alloc] initWithRed:176/255.0f  green:224/255.0f blue:230/255.0f alpha:1] 

#import "F3PlotStrip.h" 
#import "PlotViewController.h" 

@interface PlotViewController() 

@property (strong, nonatomic) IBOutlet F3PlotStrip *IBOPLotView; 
@property (strong, nonatomic) NSTimer *plotStipTimer; 
@property (strong, nonatomic) NSArray *plotData; 
@property (nonatomic) NSInteger plotDataArrayIdx; 
@property (strong, nonatomic) F3PlotStrip *plotView2; 

@end 

@implementation PlotViewController 

@synthesize plotStipTimer; 
@synthesize plotData; 
@synthesize plotDataArrayIdx; 

BOOL bUsingDynPlot = YES; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)testGraph:(NSTimer *)a_timer { 

    float RSEFigure = [[self.plotData objectAtIndex:plotDataArrayIdx] floatValue]; 

    if (bUsingDynPlot) 
     _plotView2.value = RSEFigure; 
    else 
     _IBOPLotView.value = RSEFigure; 

    ++plotDataArrayIdx; 

    if (plotDataArrayIdx == [self.plotData count]) { 
     [plotStipTimer invalidate]; 
     plotStipTimer = nil; 
    } 

} 

- (void)configurePLotStrip:(F3PlotStrip *)plotStrip { 

    plotDataArrayIdx = 0; 
    // Random rubbish that makes it look like a heartbeat : 
    self.plotData = [NSArray arrayWithObjects:[NSNumber numberWithFloat:68.1f], 
       [NSNumber numberWithFloat:70.2f], 
       [NSNumber numberWithFloat:71.3f], 
       [NSNumber numberWithFloat:72.4f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:100.5f], 
       [NSNumber numberWithFloat:124.5f], 
       [NSNumber numberWithFloat:10.5f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:70.6f], 
       [NSNumber numberWithFloat:70.2f], 
       [NSNumber numberWithFloat:71.3f], 
       [NSNumber numberWithFloat:72.4f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:100.5f], 
       [NSNumber numberWithFloat:124.5f], 
       [NSNumber numberWithFloat:10.5f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:70.6f], 
       [NSNumber numberWithFloat:70.2f], 
       [NSNumber numberWithFloat:71.3f], 
       [NSNumber numberWithFloat:72.4f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:100.5f], 
       [NSNumber numberWithFloat:124.5f], 
       [NSNumber numberWithFloat:10.5f], 
       [NSNumber numberWithFloat:73.5f], 
       [NSNumber numberWithFloat:70.6f], 
       nil]; 

    // Get value bounds 
    float max = -999999; 
    float min = 999999; 
    for (NSInteger i = 0;i <= self.plotData.count - 1;++i) { 
     float RSEFigure = [[self.plotData objectAtIndex:i] floatValue]; 
     if (RSEFigure > max) 
      max = RSEFigure; 
     if (RSEFigure < min) 
      min = RSEFigure; 
    } 

    plotStrip.lowerLimit = min; 
    plotStrip.upperLimit = max; 
    plotStrip.lineColor = COLOUR_POWDER_BLUE; 
    [self.view addSubview:_IBOPLotView]; 
    plotStipTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(testGraph:) userInfo:nil repeats:YES]; 
    plotStrip.showDot = YES; 
    plotStrip.capacity = self.plotData.count; 

} 

- (void)viewDidLoad { 

    if (bUsingDynPlot) { 
     // Dynamically adding to view. 
     _plotView2 = [[F3PlotStrip alloc] init]; 
     _plotView2.backgroundColor = [UIColor redColor]; 
     _plotView2.frame = CGRectMake(0, 100, 293, 35); 
     [[self view] addSubview:_plotView2]; 
     [self configurePLotStrip:_plotView2]; 
    } else { 
     [self configurePLotStrip:_IBOPLotView]; 
    } 
    [super viewDidLoad]; 

} 

- (void)didReceiveMemoryWarning { 

    [super didReceiveMemoryWarning]; 

} 

@end 

我希望這很容易讓你投入到一個新的風險投資。假如你在你的項目文件夾中有F3PlotStrip.h和.m,那麼除了添加一個UIView到VC之外,你還是很好。

Carl。

+0

爲什麼要在'configurePLotStrip'方法中每次添加'[self.view addSubview:_IBOPLotView];'' –

+0

是的。這似乎有點毫無意義。我基本上需要一個Sparkline類型的繪圖儀。我在GitHub上找到了該對象,並用Google搜索瞭解是否有任何問題。那是我找到這個頁面的時候。本章不能以編程方式添加PlotView。無論如何,它不能正確工作。我不在我的MAC前面,在我的手機上偷拍。但我想addSubview是從動態添加方面留下的剩餘線。 –

+0

Oooops。道歉。你是那個人!剛注意到。它有什麼用途嗎?很高興提供幫助,如果有的話。 –