现在,我正在尝试创建一个绘制正弦函数的iPad应用程序,然后转换正弦函数。我通过覆盖自定义uiview类中的drawrect函数绘制正弦图并将其加载到uiview对象。正弦函数在上下文中很好地绘制,以及在不同上下文中绘制的网格和轴。
我放了几个滑块,然后计划使用滑块来更改我用于绘图的uiview类中的变量。现在问题是,我意识到我无法从自定义uiview类访问viewcontroller中的变量,我怀疑我可能错误地使用了错误的范例来编写整个程序。
有人可以帮我解决这里的困惑吗?它不一定是精确的代码,而是更多的是我应该如何在视图对象上绘制和重绘正弦函数,同时通过滑块更改正弦函数的变量。
谢谢你的帮助:) 来自印度尼西亚的钱德拉。
答案 0 :(得分:1)
有两种方法可以解决这个问题:
不是让UIView询问UIViewController中的值,而是在其中一个滑块发生变化时将值推送到UIVIew。这样UIView就可以做它应该做的事情:绘制ViewController要求的内容。
想想你在UIView中实现的redrawUsingNewValues:
之类的函数,你可以从UIViewController调用。
使用委托。如果你真的希望UIView处于控制状态,你可以使用委托给它一个指向UIViewController的指针。这样UIView就不拥有UIViewController,但是你可以得到你想要的值。 有关授权的介绍,请访问:Delegation and the Cocoa Frameworks
祝你的计划好运!
答案 1 :(得分:0)
编辑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设置自定义类。祝你好运!