我有一个UISlider
放置在我的主视图中,并且我添加了一个UIView
与它自己的类相关联的子视图(通过界面生成器)SecondView
。我需要将滑块的值传递给我的子视图,以便在滑块更改时在子视图中移动一个点。
我对原始代码进行了更改,以下段落不再准确。我使用了@MatthiasBauch 提供的建议更改。
我认为在两者之间共享 iVar 会很简单。我在我的界面中myPoint
使用@property
(如果这仍然被认为是 iVar)创建了一个 iVar ViewController
,myPoint = sliderValue.value
在我的ViewController
实现中设置IBAction
为当滑块值发生变化时。然后在我的SecondView
实现中,我在我的实现中#import "ViewController.h"
调用我的调用我的 iVar,SecondView
但我完成它的方式只返回nil
或0
而不是滑块值。
我不想使用全局变量。
我看过其他似乎在问类似问题的帖子,但我想我仍然错过了这个概念。我的代码如下。
视图控制器.h
#import <UIKit/UIKit.h>
#import "SecondView.h"
@interface ViewController : UIViewController
{
SecondView *secondView; // Do I need this with secondView declared as a @property below?
}
@property (nonatomic, retain) SecondView *secondView;
- (IBAction)sliderChanged:(id)sender;
@property (weak, nonatomic) IBOutlet UISlider *sliderValue;
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@property (weak, nonatomic) IBOutlet UIView *myView;
@end
视图控制器.m
#import "ViewController.h"
#import "SecondView.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize sliderValue, myLabel, myView, secondView;
- (void)viewDidLoad
{
[super viewDidLoad];
secondView.thePoint = 50;
NSLog(@"%f", secondView.thePoint); // This is retuning a zero
}
- (IBAction)sliderChanged:(id)sender
{
secondView.thePoint = sliderValue.value;
myLabel.text = [NSString stringWithFormat:@"%.2f", sliderValue.value];
[secondView setNeedsDisplay];
}
@end
第二视图.h
#import <UIKit/UIKit.h>
@interface SecondView : UIView
@property (assign, nonatomic) CGFloat thePoint;
@end
第二视图.m
#import "SecondView.h"
@implementation SecondView
@synthesize thePoint;
- (void)drawRect:(CGRect)rect
{
float aPoint = thePoint;
NSLog(@"%f", aPoint); // this is retuning 0.000000
UIBezierPath *point = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(aPoint, 100, 4, 4)];
[point fill];
}
@end