私があなたに私のコード/ストーリーボードを見せたいすべての最初:
これが私のストーリーボードです。小さなUISliderとUIViewがあります。UIViewはカスタムビューであり、彼のクラスは「SquareView」です。これはコードです:
SquareView.h
#import <UIKit/UIKit.h>
@class SquareView;
@protocol SquareViewDelegate <NSObject>
-(int)giveMeTheNumbersOfSquare:(SquareView *)squareView;
@end
@interface SquareView : UIView
@property (nonatomic , weak) IBOutlet id<SquareViewDelegate> delegate;
@end
およびSquareView.m
#import "SquareView.h"
@implementation SquareView
@synthesize delegate;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
int numberOfSquare = [delegate giveMeTheNumbersOfSquare:self];
NSLog(@"Value of numberOfSquare in drawRect---> %d" ,numberOfSquare);
//numberOfSquare = 20;
for (int i=0; i<numberOfSquare; i++) {
float x = arc4random() % (int)self.frame.size.width - 20;
float y = arc4random() % (int)self.frame.size.width - 20;
UIRectFill(CGRectMake(x, y, 20.0, 20.0));
// NSLog(@"X---> %f" ,x);
//NSLog(@"Y---> %f" ,y);
[self setNeedsDisplay];
}
// Drawing code
}
@end
これで、ViewController...ViewControllerはSquareViewのデリゲートです。
ViewController.h
#import <UIKit/UIKit.h>
#import "SquareView.h"
@interface TestViewController : UIViewController <SquareViewDelegate>
@property (weak) IBOutlet SquareView *squareView;
@property(weak) IBOutlet UISlider *slider;
-(IBAction)changeSquareNumbers:(id)sender;
@end
およびViewController.m
#import "TestViewController.h"
@interface TestViewController ()
{
int _squareCount;
}
@end
@implementation TestViewController
@synthesize squareView = _squareView;
@synthesize slider = _slider;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)awakeFromNib
{
[_squareView setDelegate:self];
_squareCount = 50;
[self.squareView setNeedsDisplay];
}
/********* Delegate Method *********/
-(int)giveMeTheNumbersOfSquare:(SquareView *)squareView
{
//return _squareCount;
NSLog(@"Value of _squareCount in giveMeTheNumberOfSquare ---> %d" ,_squareCount);
return _squareCount;
}
-(IBAction)changeSquareNumbers:(UISlider *)sender
{
NSLog(@"Value of slider in changeSquareNumbers --> %f" ,[sender value]]);
_squareCount = (int)[sender value];
NSLog(@"Value of _sqareCount ---> %d" ,_squareCount);
[self.squareView setNeedsDisplay];
}
さて...SquareView.mファイルのdrawRect関数でプログラムが「giveMetheNumbersOfSquare関数」を呼び出さない理由がわかりません。drawRectの「numberOfSquare」が0のままである理由がわかりません!!!なぜプログラムが「giveMeTheNumberOfSquare」関数には絶対に入らないでください!!
ありがとう!!