2012-06-07 97 views
0

以下文件將一系列形狀加載到UIViewController中。每個形狀隨機放置在屏幕上。我可以使用下面的代碼來水平改變圖像的形狀,但是我無法移動UIView上圖像的x和y座標。如何將形狀移動到屏幕上的其他位置?以下更改了UIView的寬度:無法移動UIView

[UIView animateWithDuration:0.5f animations:^{[[timer userInfo] setBounds:CGRectMake(0, 0, 100, 5)];}]; 

ViewController.h

#import <UIKit/UIKit.h> 
#import "Shape.h" 

@interface ViewController : UIViewController 

@end 

ViewController.m

#import "ViewController.h" 

@implementation ViewController 

UIView *box; 
int screenHeight; 
int screenWidth; 
int x; 
int y; 
Shape * shape; 
- (void)viewDidLoad 
{ 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    screenHeight = screenRect.size.height; 
    screenWidth = screenRect.size.width; 
    box = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];  
    [self.view addSubview:box]; 
    for (int i = 0; i<3; i++) { 
     x = arc4random() % screenWidth; 
     y = arc4random() % screenHeight; 
     shape =[[Shape alloc] initWithX:x andY:y]; 
     [box addSubview:shape];  
     [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(moveTheShape:) userInfo:shape repeats:YES];  
    } 
} 
-(void) moveTheShape:(NSTimer*)timer 
{ 
    //[UIView animateWithDuration:0.5f animations:^{[[timer userInfo] setBounds:CGRectMake(100, 0, 100, 5)];}]; 
    [UIView animateWithDuration:0.5f animations:^{[[timer userInfo] setBounds:CGRectMake(0, 0, 100, 5)];}]; 
} 
@end 

Shape.h

#import <UIKit/UIKit.h> 

@interface Shape : UIView; 

- (id) initWithX: (int)xVal andY: (int)yVal; 

@end 

Shape.m

#import "Shape.h" 

@implementation Shape 

- (id) initWithX:(int)xVal andY:(int)yVal { 
    self = [super initWithFrame:CGRectMake(xVal, yVal, 5, 5)]; 
    self.backgroundColor = [UIColor redColor]; 
    return self; 
} 

@end 

回答

1

在你moveTheShape方法,你需要設置的框架,沒有邊界,並在CGRectMake x和y的值設置爲大於0

其他的東西你可以得到你原來的X和Y

-(void) moveTheShape:(NSTimer*)timer { 
     CGRect frame = [timer.userInfo frame]; 
     float frameX = frame.origin.x; 
     float frameY = frame.origin.y; 
     NSLog(@"X component is:%f Y component is:%f",frameX,frameY); 
     [UIView animateWithDuration:0.5f animations:^{[[timer userInfo] setFrame:CGRectMake(200, 100, 5, 5)];}]; 
    } 
+1

的0在他'CGRectMake'指定的的CGRect的左上角應該是在屏幕的左上角,所以他們是完全正常的,並沒有:在moveTheShape方法是這樣的值被改變。但是,我相信你說OP中必須設置框架而不是'moveTheShape'方法中的邊界是正確的。這是因爲邊界表示相對於它自己的座標系統的視圖的位置和大小,而它的框架是相對於它所在的超視圖的座標系統的位置和大小。 – pasawaya

+0

例如,如果您有位於(0,0)處的視圖,它的框架和邊界是相等的,但是如果將它向右移動一個像素,則邊界仍然是相同的,但框架的x座標將是一個更大。在這裏看到更多的信息:http://stackoverflow.com/questions/1210047/iphone-development-whats-the-difference-between-the-frame-and-the-bounds – pasawaya

+0

完美。謝謝。我可以問你跟進嗎?在moveTheShape方法中,我想要連續的形狀實例來改變它們的位置(例如,x + = 5)。有沒有一個對象允許我提取一個CGRect來讓我讀取當前的x,y值?我試過\t CGRect oldVals = [(Shape *)timer frame]; int oldX = oldVals.origin.x; int oldY = oldVals.origin.y; 但這給了我一個錯誤。 – SimonRH