0

亲爱的objectiveC大师,我是一个新手苹果程序员,由于我目前正在攻读数学教育硕士学位,我想写一篇关于制作基于数学教育的应用程序的论文。

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

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

有人可以帮我消除这里的困惑吗?它不必在确切的代码中,而是更多关于我应该如何在视图对象上绘制和重绘正弦函数的大图,同时通过滑块更改正弦函数的变量。

感谢您的帮助 :) 来自印度尼西亚的 Chandra。

4

2 回答 2

1

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

  1. 除了让 UIView 从 UIViewController 询问值之外,您还可以在其中一个滑块更改时将值推送到 UIVIew。这样 UIView 会做它应该做的事情:绘制 ViewController 要求他做的事情。想一想redrawUsingNewValues:您在 UIView 中实现并从 UIViewController 调用的功能。

  2. 使用委托。如果你真的希望 UIView 处于控制之中,你可以使用委托给它一个指向 UIViewController 的指针。这样 UIView 不拥有 UIViewController,但你可以得到你想要的值。可以在此处找到关于委托的介绍:Delegation and the Cocoa Frameworks

祝你的节目好运!

于 2013-09-03T09:31:02.077 回答
0
  1. UIViewController 中的方法应该能够识别滑块值何时发生变化
  2. 相同的方法应该触发 UIViewController 中的另一个方法来更新/重新计算正弦函数值(例如创建一个值数组)
  3. 在更新方法结束时,必要的值通过从 UIViewController 到 UIView 的出口传输到 UIView(UIView 是 UIViewController 的属性)
  4. UIView 正在绘制矩形中绘制新的正弦函数

编辑 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 以及如何连接 UIView。您还需要为 ViewController 和 YourGraphUIView 设置自定义类。祝你好运!

于 2013-09-03T10:39:11.090 回答