2012-02-11 6 views
1

ボタンを押したときに画面の上から80をスライドさせる基本的なサブビューがあります。私はUIViewを継承する別のクラス、AdvancedViewを作成しました。私がしたいことまず第一に、このサブビューを作成するすべてのコードをそれ自身のクラスにプッシュします:AdvancedView。私はどういうわけか、メインビューがロードされたときに、サブビューのトップ100が表示されているところに設定したいと思うでしょう。私は上と下にトグルするこのサブビューの部分を示す上のボタンを置くつもりです(私はボタンをコーディングする方法を知っています)。ここで私はAdvancedViewに入れ、トップ100の上映を持っている必要がありますコードがあるときに、メインビューCalcViewControllerロード:このサブビューを自分のサブクラスにプッシュするにはどうすればよいですか?

#import "CalcViewController.h" 
#import "CalculatorBrain.h" 
#import "AdvancedView.h" 

@property (nonatomic, strong) AdvancedView *myNewView; 
@synthesize myNewView = _myNewView; 

- (AdvancedView *) myNewView 
{ 
    if (!_myNewView) _myNewView = [[AdvancedView alloc] init]; 
    return _myNewView; 
} 

- (IBAction)subView { 

    self.myNewView.backgroundColor = [UIColor groupTableViewBackgroundColor]; 
    self.myNewView.frame = CGRectMake(0,489, 320, 200); 
    [self.view addSubview:self.myNewView]; 
    float bottomYOfDigitBeingDisplayed = 75; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(aMethod:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Show View" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
    [self.myNewView addSubview:button]; 


    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationDuration: 1.0]; 
    self.myNewView.frame = CGRectMake(0, bottomYOfDigitBeingDisplayed, 320, 400); 
    [UIView commitAnimations]; 
} 

答えて

1

あなたのUIViewのサブクラスは、この

の.h

@interface AdvancedView : UIView { 

} 

@end 
ようになります。

.m

@implementation AdvancedView 

- (id) initWithFrame:(CGRect)rect{ 

    if(self = [super initWithFrame:rect]){ 

     self.backgroundColor = [UIColor groupTableViewBackgroundColor]; 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [button addTarget:self 
        action:@selector(display:) 
        forControlEvents:UIControlEventTouchDown]; 
     [button setTitle:@"Show View" forState:UIControlStateNormal]; 
     button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 

     [self addSubview:button]; 

    } 

    return self; 



} 

- (void) display:(id)sender{ 

    float bottomYOfDigitBeingDisplayed = 75; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationDuration: 1.0]; 
    self.frame = CGRectMake(0, bottomYOfDigitBeingDisplayed, 320, 400); 
    [UIView commitAnimations]; 
} 

@end 

UIViewControllerは次のようになります

#import "CalcViewController.h" 
#import "CalculatorBrain.h" 
#import "AdvancedView.h" 

@property (nonatomic, strong) AdvancedView *myNewView; 
@synthesize myNewView = _myNewView; 

- (AdvancedView *) myNewView 
{ 
    if (!_myNewView) _myNewView = [[AdvancedView alloc] initWithFrame: 
                CGRectMake(0,489, 320, 200);]; 
    return _myNewView; 
} 

- (IBAction)subView { 

    int advancedTag = 199998; 
    self.myNewView.tag = advancedTag; 

    if(![self.view viewWithTag:advancedTag]){ 
     [self.view addSubview:self.myNewView]; 
    } 
} 
+0

これは素晴らしいようですが、メインビューが読み込まれたときに画面の下部に表示するサブビューのトップ100などの部分を取得できないようです。ユーザーにサブビューがあることを知らせ、サブビューの上部にあるボタンをクリックして画面の上部に向かって拡大できるようにします。これを行う方法はありますか?たぶん、それはsetterまたはgetterの何らかの設定によって、CalcViewControllerがロードされるとすぐにロードされるでしょうか? – Scott

+0

self.myNewView.frame.origin.y = 480-100;この設定は、必要なときにいつでも行うことができ、サブビュー上のビューの上位100部分を表示する必要があります。 –

+0

私はちょうど2つの異なる場所でそれを設定しようとしました、そして、私はExpressionが割り当て可能でないというエラーメッセージを受け取ります。私は両方のサブビューアクション(ボタンに接続)でそれを設定しようとしたときに、それは私がmyNewViewセッターで設定しようとしていない動作しませんでした。 – Scott

関連する問題