2015-11-01 88 views
0

我創建了一個自定義的UIView(ProgressView),我繪製從PaintCode通過StyleKit導入的形狀。如何從ViewController更改自定義UIView的變量

以下是代碼。我已經在我的自定義UIView中聲明瞭實例變量屬性,當我嘗試從ViewController更改屬性時,它不起作用。

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 

*查看Controller.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 
+2

您已經在viewDidLoad中創建了一個新的進度視圖,但未將其添加到您的視圖層次結構中,因此它將不可見。並且引用存儲在一個局部變量中,因此只要需要退出就會被釋放。如果您通過故事板屏幕在屏幕上顯示另一個實例,那麼您應該設置一個IBOutlet屬性,以便您可以更新*該實例 – Paulw11

+0

我不是100%確定,但我不認爲您可以使用「new」作爲變量名稱。在Objective-C中可能有一個關鍵字,如果沒有的話,我不認爲它是一個好的變量名稱:) – Yan

+0

沒有理由不能設置IBAction方法的值。也許顯示代碼。 – Paulw11

回答

1

您需要將此視圖添加到UIViewController的看法:

[self.view addSubview:progressView]; 

之後,還必須設置一個框架。例如

[progressView setFrame:self.view.bounds]; 

你可以做到這一點在viewDid/WillLayoutSubviews方法來改變它的旋轉/窗口大小調整事件。

順便說一句,不要將您的視圖命名爲new,這太可怕了。這個名字甚至沒有告訴它是什麼樣的變量。