用Drawrect绘图

时间:2013-09-03 08:56:00

标签: ios uiview core-graphics

亲爱的ObjectiveC大师, 我是一名新手苹果程序员,因为我目前正在攻读数学教育硕士学位,所以我想要制作一篇关于制作基于数学教育的应用程序的论文。

现在,我正在尝试创建一个绘制正弦函数的iPad应用程序,然后转换正弦函数。我通过覆盖自定义uiview类中的drawrect函数绘制正弦图并将其加载到uiview对象。正弦函数在上下文中很好地绘制,以及在不同上下文中绘制的网格和轴。

我放了几个滑块,然后计划使用滑块来更改我用于绘图的uiview类中的变量。现在问题是,我意识到我无法从自定义uiview类访问viewcontroller中的变量,我怀疑我可能错误地使用了错误的范例来编写整个程序。

有人可以帮我解决这里的困惑吗?它不一定是精确的代码,而是更多的是我应该如何在视图对象上绘制和重绘正弦函数,同时通过滑块更改正弦函数的变量。

谢谢你的帮助:) 来自印度尼西亚的钱德拉。

2 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题:

  1. 不是让UIView询问UIViewController中的值,而是在其中一个滑块发生变化时将值推送到UIVIew。这样UIView就可以做它应该做的事情:绘制ViewController要求的内容。 想想你在UIView中实现的redrawUsingNewValues:之类的函数,你可以从UIViewController调用。

  2. 使用委托。如果你真的希望UIView处于控制状态,你可以使用委托给它一个指向UIViewController的指针。这样UIView就不拥有UIViewController,但是你可以得到你想要的值。 有关授权的介绍,请访问:Delegation and the Cocoa Frameworks

  3. 祝你的计划好运!

答案 1 :(得分:0)

  1. UIViewController中的方法应该识别滑块值何时更改
  2. 同样的方法应该触发UIViewController中的另一个方法来更新/重新计算正弦函数值(例如创建一个值数组)
  3. 在update-methode的末尾,必要的值通过UIViewController的一个插件传送到UIView到UIView(UIView是UIViewController的一个属性)
  4. UIView正在draw rect
  5. 中绘制新的正弦函数

    编辑1: 你的ViewController.h:

    #import <UIKit/UIKit.h>
    @class YourGraphUIView; // that's you view where you draw
    
    @interface ResultViewController: UIViewController
    
    @property (weak, nonatomic) IBOutlet UISlider *valueFromSlider; //bound to your UISlider
    @property (weak) IBOutlet YourGraphUIView *yourGraphUIView; //bound to your costumUIView
    @property (nonatomic, retain) NSNumber *graphValue;
    
    - (IBAction)takeSliderValue:(id)sender; //bound to your UISlider
    
    @end
    

    您的ViewController.m:

    #import "ResultViewController.h"
    #import "YourGraphUIView.h"
    
    @interface ResultViewController ()
    
    @end
    
    @implementation ResultViewController
    @synthesize yourGraphUIView, valueFromSlider, graphValue;
    
    - (IBAction)takeSliderValue:(UISlider *)sender{
    
    graphValue = [NSNumber numberWithDouble:[(double)sender.value]]; //takes value from UISlider
    yourGraphUIView.graphValue = graphValue; //gives the value to the yourGraphUIView
    [self.yourGraphUIView setNeedsDisplay] //<--- important to redraw UIView after changes
    }
    end
    

    YourGraphUIView.h:

    #import <UIKit/UIKit.h>
    
    @interface YourGraphUIView : UIView
    
    @property(nonatomic, retain)NSNumber *graphValue;
    
    - (void)drawRect:(CGRect)dirtyRect;
    
    @end
    

    YourGraphUIView.m:

    #import "YourGraphUIView.h"
    
    @implementation YoutGraphUIView
    
    @synthesize graphValue;
    
    //... init, draw rect with using the graphValue for calculating and updating the graph
    
    end;
    

    我希望这有帮助。您应该看看如何构建GUI以及如何连接UIViews。您还需要为ViewController和YourGraphUIView设置自定义类。祝你好运!