0

スライダーの値に応じて上下に動くグラフを描画しようとしています。私のグラフは、カスタムクラスGraphViewに属するビューで描画されています。プロジェクトには1つのViewControllerがあり、スライダーはメソッドmoveLineを呼び出します。これには、endXPoint=mySlider.valueのように設定したプロパティendXPointがあります。

私の問題は、GraphViewのdrawRectメソッド内からこの値を参照する方法がわからないことです。

ViewControllerでGraphViewへの参照を作成し、そこでプロパティを設定しようとしましたが、機能しません
。GraphView * myGraphView =(GraphView *)self.view;
myGraphView.endXPoint = mySlider.value;

4

1 に答える 1

0

次のようにGraphViewクラスのプロパティを設定する必要があります。

@interface GraphView : UIView
@property float endXPoint;

次に、ViewControllerから次のようにGraphView変数を設定します。

[myGraphView setendXPoint: [mySlider value]];
[myGraphView setNeedsDisplay];

最後の行は、drawRectメソッドを呼び出して、グラフビューにビューを更新するように要求します。drawRectメソッドでは、クラスプロパティであるため、endXPointを直接使用できます。

これは正しいバージョンです:

//ViewController.h

#import <UIKit/UIKit.h> 
#import "GraphView.h" //import headers in the header file

@interface ViewController : UIViewController  

@property (strong, nonatomic) IBOutlet UISlider *mySlider;  
@property (strong, nonatomic) IBOutlet UILabel *myLabel;  
@property (strong, nonatomic) IBOutlet GraphView *myGraphView; //Connect this with the IB

- (IBAction)moveLine:(id)sender; 
- (IBAction)setLabelText:(id)sender;  
@end  

//ViewController.m

#import "ViewController.h"   

@implementation ViewController  
@synthesize mySlider;  
@synthesize myLabel;  
@synthesize myGraphView;



- (IBAction)moveLine:(id)sender {  
    [myGraphView setendXPoint:[mySlider value]];  
    [myGraphView setNeedsDisplay];  
}  

@end 

//GraphView.h 

#import <UIKit/UIKit.h>  

@interface GraphView : UIView  
@property float endXPoint;  


@end

//GraphView.m  

#import "GraphView.h"   

@implementation GraphView  
@synthesize endXPoint;  


- (void)drawRect:(CGRect)rect  
{

    CGContextRef ctx = UIGraphicsGetCurrentContext(); //get the graphics context  
    CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1);   
    CGContextMoveToPoint(ctx, 0, 0);  
    //add a line from 0,0 to the point 100,100;   
    CGContextAddLineToPoint( ctx, endXPoint,100);  
    //"stroke" the path  
    CGContextStrokePath(ctx);  
}  


@end
于 2012-04-30T09:52:22.487 に答える