2009-04-02 30 views
14

Tôi có một số UIImageView hiển thị hình ảnh lớn hơn. Nó dường như là trung tâm, nhưng tôi muốn di chuyển hình ảnh đó trong đó UIImageView. Tôi đã xem mẫu MoveMe từ Apple, nhưng tôi không thể tìm ra cách họ làm điều đó. Dường như họ thậm chí không có UIImageView cho điều đó. Ý tưởng nào?Có thể đặt vị trí của hình ảnh của UIImageView không?

Trả lời

19

Câu trả lời gốc đã được thay thế bởi CoreAnimation trong iOS4.

Vì vậy, như Thumb vàng nói: bạn có thể làm điều này bằng cách truy cập CALayer của UIView. Cụ thể nội dung của nóRect:

Từ Apple Docs: Hình chữ nhật, trong không gian tọa độ đơn vị, xác định phần nội dung của lớp sẽ được sử dụng. Có thể hoạt hình.

+0

Sai. Xem câu trả lời của @ GoldThumb. –

+2

Ngay tại thời điểm đăng bài (2009!) Tôi đã cập nhật câu trả lời để trỏ tới CALayer –

+0

Tuyệt vời! Cảm ơn vì sự đúng đắn của bạn. –

4

Nó không giống như mẫu MoveMe làm bất cứ điều gì giống như những gì bạn muốn. PlacardView trong đó có cùng kích thước với hình ảnh được sử dụng. Thay đổi kích thước duy nhất được thực hiện cho nó là một phép biến đổi khung nhìn, không ảnh hưởng đến chế độ xem của hình ảnh. Khi tôi hiểu nó, bạn có một bức tranh lớn và muốn hiển thị một khung nhìn nhỏ vào đó. Không có một phương pháp lớp đơn giản để làm điều này, nhưng có một chức năng mà bạn có thể sử dụng để có được kết quả mong muốn: CGImageCreateWithImageInRect (CGImageRef, CGRect) sẽ giúp bạn.

Dưới đây là một ví dụ ngắn sử dụng nó:

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
CGImageRelease(imageRef); 
12

Bạn có muốn hiển thị hình ảnh để nó được chứa trong các UIImageView? Trong trường hợp đó chỉ cần thay đổi contectMode của UIImageView thành UIViewContentModeScaleToFill (nếu tỉ lệ khung hình không quan trọng) hoặc UIViewContentModeScaleAspectFit (nếu bạn muốn duy trì tỷ lệ co)

Trong IB, điều này có thể thực hiện bằng cách đặt Chế độ trong Trình kiểm tra.

Trong mã, nó có thể được thực hiện như

yourImageView.contentMode = UIViewContentModeScaleToFill; 

Trong trường hợp bạn muốn hiển thị hình ảnh lớn như là bên trong một UIImageView, cách tốt nhất và dễ nhất để làm được điều này sẽ có ảnh xem bên trong UIScrollView. Bằng cách đó bạn sẽ có thể phóng to và thu nhỏ hình ảnh và cũng di chuyển nó xung quanh.

Hy vọng điều đó sẽ hữu ích.

3

Cảm ơn rất nhiều. Tôi đã tìm thấy một giải pháp khá đơn giản giống như sau:

CGRect frameRect = myImage.frame; 
CGPoint rectPoint = frameRect.origin; 
CGFloat newXPos = rectPoint.x - 0.5f; 
myImage.frame = CGRectMake(newXPos, 0.0f, myImage.frame.size.width, myImage.frame.size.height); 

Tôi chỉ di chuyển khung xung quanh. Nó xảy ra rằng các phần của khung đó đi ra khỏi cổng xem của iPhone, nhưng tôi hy vọng rằng điều này sẽ không quan trọng nhiều. Có một mặt nạ trên nó, vì vậy nó không có vẻ lạ. Người dùng không hoàn thành cách thực hiện.

0

Bạn có thể thực hiện như nhau theo:

UIImageView *imgVw=[[UIImageView alloc]initwithFrame:CGRectMake(x,y,height,width)];  
imgVw.image=[UIImage imageNamed:@""]; 
[self.view addSubView imgVw]; 
imgVw.contentMode = UIViewContentModeScaleToFill; 
22

gì bạn cần là một cái gì đó tương tự (ví dụcho thấy 30% 30% của góc trên cùng bên trái của ảnh gốc):

imageView.layer.contentsRect = CGRectMake(0.0, 0.0, 0.3, 0.3); 

Mô tả "contentsRect": Các hình chữ nhật, trong các đơn vị phối hợp không gian, xác định phần nội dung của lớp đó nên được sử dụng.

+2

Tại sao lại là downvote? Điều này hoạt động hoàn hảo nếu bạn đặt 'contentMode' của ImageView thành' UIViewContentModeScaleAspectFill'. Hãy chắc chắn cũng bật 'clipToBounds'. –

Các vấn đề liên quan