2

私は現在、グラフベースの iOS アプリに取り組んでいます。このために、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;
}

しかし、私は次のような結果を得ました:

コード F3

次に、に a を追加し、UIViewそのxibクラスを に変更し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

しかし、コードを介してビューを追加すると問題が発生するのはなぜですか? グラフを動的に追加する必要があるため、2 番目のアプローチ (IB 経由) には依存できません。とにかくこの問題を解決する方法はありますか? それとも、これは F3PlotStrip のバグですか?

4

1 に答える 1

1

今朝、このウィジェットを使い始めました。今はiPhoneで寝ているので、投稿したいものを投稿できませんが、朝出勤したら投稿します。

私はそれを使用して、動的に追加された UIView、または F3PlotStrip であなたがしようとしていることを実行することができました。

.h と .m も ARC 準拠にしました。あなたがそれをしたかどうかはわかりません。

明日は、NSTimer を使用して NSArray の内容を読み取り、アニメーション付きで動的にプロットする素敵なコードで締めくくります。再びビューを使用して、ビューコントローラーにサブビューとして追加しました。

明日、私がなんとかうまくいったことを投稿するので、あなたのコードを詳しく調べませんでした。

わかりました - ここで私は仕事をしていて、Xcode の前に座っています。これは、このウィジェットの基本的なテストベッドとして使用した私の VC です。昨夜すぐにノックアップしましたが、仕事はします。最初に、UIView を Storyboard の最初の VC に追加し、それを F3PlotStrip にサブクラス化しました。しかし、UIView を動的に追加する際に問題が発生しているのを見たので、やってみようと思いました。あなたと私の唯一の違いは、alloc-init の後に UIView のフレームを設定していることです。あなたの考えを見てください。スパークライン アプローチを使用し、画面上でグラフをアニメーション化します。

//
//  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

これで、新しい VC に簡単に参加できることを願っています。プロジェクト フォルダーに F3PlotStrip.h と .m があれば、UIView を VC に追加する以外は問題ありません。

カール。

于 2013-05-16T22:32:04.883 に答える