Search code examples
iosobjective-cpaintcode

How to change variable of custom UIView from ViewController


I have created a custom UIView (ProgressView) where I draw a shape imported via StyleKit from PaintCode.

Below are the codes. I have declared instance variable property in my custom UIView and when I try to change property from ViewController, It does not work.

ProgressView.h

#import <UIKit/UIKit.h>

@interface ProogressView : UIView

@property (nonatomic) float daysFraction;
@property (nonatomic) float pagesFraction;


@end

ProgressView.m

#import "ProgressView.h"
#import "StyleKitName.h"
#import "ViewController.h"

@implementation ProgressView
@synthesize daysFraction = _daysFraction;
@synthesize pagesFraction = _pagesFraction;


- (void)drawRect:(CGRect)rect {
    // Drawing code
    [StyleKitName drawCanvas1WithDaysFraction:self.daysFraction pageFraction:self.pagesFraction];
}


-(void)awakeFromNib {
    [super awakeFromNib];
    self.pagesFraction = 0;
    self.daysFraction = 0;
}

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

*ViewController.m**

#import "ViewController.h"
#import "ButtonAnimation.h"
#import "ProgressView.h"
#import "StyleKitName.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet ButtonAnimation *buttonView;
@property (weak, nonatomic) IBOutlet UIButton *actionButton;

@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    ProgressView *new =[[ ProgressView alloc]init];
    new.daysFraction = 0.7f; // here I am setting value to variable in custom view ProgressView but not working.

}

- (IBAction)animateTheButton:(id)sender {
    self.buttonView.layer.backgroundColor = [UIColor clearColor].CGColor;
    [self.buttonView addErrorAnimation];

}


@end

Solution

  • You need to add this view to UIViewController's view:

    [self.view addSubview:progressView];
    

    Later, you must also set a frame. Eg

    [progressView setFrame:self.view.bounds];
    

    You may do it in viewDid/WillLayoutSubviews method to change it on rotation / window resize event.

    BTW, do not name your view as new, it's horrible. Such name doesn't even tell what kind of variable is it.