2010-12-09 22 views
4

我的目標很簡單;我想創建一個顯示UIImage的程序,當從下到上滑動時,顯示另一個UIImage。這裏的圖像可能是一個快樂的臉/悲傷的臉。悲傷的面孔應該是出發點,幸福的臉孔應該是終點。當用手指滑動時,手指下面的部分應該顯示愉快的臉。界限和框架:如何顯示UIImage的一部分

到目前爲止,我嘗試用UIImageview的框架和邊界屬性來解決這個問題,我用它來表達歡樂的臉部圖像。

這段代碼做錯了什麼,因爲過渡開始於屏幕中心而不是底部。請注意,框架和界限的起源都是0,0 ...

我已經閱讀了許多關於框架和邊界的頁面,但我不明白。任何幫助表示讚賞!

loadimages只被調用一次。

- (void)loadImages { 
    sadface = [UIImage imageNamed:@"face-sad.jpg"]; 
    happyface = [UIImage imageNamed:@"face-happy.jpg"]; 
    UIImageView *face1view = [[UIImageView alloc]init]; 
    face1view.image = sadface; 
    [self.view addSubview:face1view]; 

    CGRect frame; 
    CGRect contentRect = self.view.frame; 
    frame = CGRectMake(0, 0, contentRect.size.width, contentRect.size.height); 
    face1view.frame = frame; 
    face2view = [[UIImageView alloc]init]; 
    face2view.layer.masksToBounds = YES; 
    face2view.contentMode = UIViewContentModeScaleAspectFill; 
    face2view.image = happyface; 
    [self.view addSubview:face2view]; 
    frame = CGRectMake(startpoint.x, 0, contentRect.size.width, contentRect.size.height); 
    face2view.frame = frame; 
    face2view.clipsToBounds = YES; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint movepoint = [[touches anyObject] locationInView: self.view]; 
    NSLog(@"movepoint: %f %f", movepoint.x, movepoint.y); 
    face2view.bounds = CGRectMake(0, 0, 320, 480 - movepoint.y); 
} 

UIImages和UIImageView在dealloc函數中正確處理。

回答

0

你的問題似乎與touchesMoved中的face2view.bounds有關。 您這視圖的邊界設置爲矩形,X:0,Y:0,寬度:320,高度:480 - ý

X = 0 ==留在x軸上

Y = 0 == y軸頂部

所以,你把這個圖像幀放在左上角,並使其填充整個視圖。這不是你想要的。圖像簡單地在這個imageView中居中。

+0

我想我需要把圖像幀放在左上角。這是因爲圖像必須重疊(它們是相同的圖像,所以如果我把它放在任何其他地方,幸福的臉相對於悲傷的臉就會移動)。有什麼方法可以從底部開始顯示快樂的臉? – 2010-12-10 16:30:45

2

事實上,你似乎對框架和界限感到困惑。事實上,他們很容易。永遠記住任何視圖都有自己的座標系。框架,中心和轉換屬性用超視圖的座標表示,邊界則用視圖自己的座標系表示。如果視圖沒有超視圖(尚未安裝到視圖層次結構中),它仍然有一個框架。在iOS中,框架屬性根據視圖的邊界,中心和變換計算。當沒有超視圖時,你可能會問地獄框架和中心是什麼意思。將視圖添加到其他視圖時可以使用它們,從而允許在視圖實際可見之前對視圖進行定位。

當視圖的邊界與其框架不同時,最常見的示例是它不在其超幀的左上角:bounds.origin可能是CGPointZero,而frame.origin不是。另一個經典的例子是UIScrollView,它經常修改其boundsorigin使子視圖滾動(實際上,修改座標系的原點會自動移動每個子視圖而不影響它們的框架),而它自己的框架是恆定的。

回到您的代碼。首先,當你已經有圖像,圖像視圖中顯示,這是有道理的與他們的圖片給init觀點:

UIImageView *face1view = [[UIImageView alloc] initWithImage: sadface]; 

這有助於攝像畫面馬上大小本身正確。建議不要使用-init初始化視圖,因爲這可能會跳過其指定初始化程序-initWithFrame:中的一些重要代碼。

由於您將face1view添加到自我。看來,你應該使用它的邊界,而不是它的框架:

face1view.frame = self.view.bounds; 

也是一樣的快樂的臉。然後在-touchesMoved:…中,您應該更改face2view的框架以在self.view內移動它或(如果self.view不包含除臉部之外的任何其他子視圖)修改self.view的界限將其中的兩個面一起移動。相反,你會做一些奇怪的事情,比如垂直拉伸face2view中的快樂面部。如果你想快樂的臉從self.view底部滑動,你應該首先設置這樣的幀(不可見最初):

face2view.frame = CGRectOffset(face2view.frame, 0, CGRectGetHeight(self.view.bounds)); 

如果選擇通過改變圖像視圖框架(換面與改變self.view的界限對比),我想你可能想要改變兩個視圖的框架起源,以便讓悲傷的臉部向上滑動,並且快樂的臉部向上滑動。或者,如果你想讓快樂的臉部覆蓋悲傷之一:

face2view.frame = face1view.frame; 
相關問題