2009-12-28 13 views
5

Tôi gặp sự cố khi tạo hình chữ nhật có kích thước lớn để cắt xén hình ảnh của mình. Tôi đang cố gắng để đạt được một cái gì đó giống như hình này:iPhone - Làm cách nào để tạo hình chữ nhật có thể thay đổi kích thước để cắt ảnh?

http://img192.imageshack.us/img192/8930/customcropbox.jpg

Vâng, vấn đề duy nhất là tôi không có đầu mối nơi để thực sự bắt đầu. Tôi cần một số lời khuyên để làm thế nào tôi có thể đạt được hiệu ứng này của cắt xén. Tôi nên đọc tài liệu gì? Core đồ họa hoặc Quartz 2d? Cả hai? Tôi đã được mã hóa cho iPhone kể từ ngày phát hành của nó nhưng tôi chưa bao giờ thực sự sử dụng đồ họa cốt lõi và vv Bất kỳ trợ giúp hoặc tư vấn sẽ được nhiều đánh giá cao. Tôi sẽ ném mã của tôi lên đây khi tôi tiến bộ để hiển thị cách nó được thực hiện khi tôi đạt được nó. :-) Ngoài ra, hộp hình chữ nhật này được di chuyển trên màn hình trong một UIImageView mà chỉ làm cho nó thú vị hơn. Cảm ơn sự giúp đỡ và tôi mong muốn đạt được mục tiêu này.

+0

Xin chào nó có thể giúp bạn biết chắc chắn chỉ mất một lần xem: https://github.com/barrettj/BJImageCropper/network/members – RayofHope

+0

Xin chào, bạn đã nhận được giải pháp cho điều này chưa? Tôi đang đối mặt với một vấn đề tương tự. – ScarletWitch

+1

Nếu bạn muốn làm giống như hình dưới đây https://raw.github.com/yuyak/YKImageCropper/master/Example/screenshot.png thì hãy sử dụng cái này: https://github.com/yuyak/YKImageCropper – RayofHope

Trả lời

1

đánh dấu trang question của tôi giống hệt nhau.

Tôi đã di chuyển xung quanh chế độ xem cắt xén của mình và hiển thị phần ảnh chính xác, nhưng việc xử lý việc thu phóng bằng cuộn là một công việc đang được tiến hành. hiện nay tôi có một imageview và đồng bằng UIView lớp trong UIScrollview, sau đó bên ngoài của scrollview và ở một cấp độ cao hơn là tùy chỉnh của tôi cắt UIView. Tôi thực hiện các phương pháp chạm để đối phó với cách kéo nó xung quanh, và cũng drawRect:

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    if(self.image == nil) 
     return; 

    CGPoint offset = scrollView.contentOffset; 
    clipRect = CGRectOffset(self.frame, offset.x, offset.y); 

    UIImage *croppedImage = [image croppedImage:clipRect]; 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    [croppedImage drawAtPoint:CGPointMake(0, 0)]; 
} 

Lưu ý: xem cắt xén của tôi là KHÔNG phải là một hậu duệ của UIImageView, nó chỉ là UIView với một tham chiếu đến hình ảnh cơ bản từ quan điểm khác.

"croppedImage" là một phạm trù trên UIImage và khá đơn giản:

@implementation UIImage (Resize) 
- (UIImage *)croppedImage:(CGRect)bounds { 
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds); 
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return croppedImage; 
} 
... 
@end 

Tôi đã thực hiện một vài trong số các phương pháp UIScrollViewDelegate và đi qua các hoạt động di chuyển vì vậy tôi có thể vẫn giữ quan điểm cắt xén của tôi trong đồng bộ. Thu phóng cũng được truyền đi, nhưng như đã đề cập, không hoạt động như mong muốn.

LƯU: ​​Tôi không nghĩ rằng nó là cần thiết để lãng phí thời gian tạo ra một UIImage mới với diện tích cắt mỗi lần như giống nhau nên có thể xảy ra với

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds); 
and 
CGContextDrawImage(ctx, clipRect, imageRef); 
1

Quartz là 'thuật ngữ tiếp thị' cho Đồ họa cốt lõi và đó là nơi bạn nên bắt đầu. Bạn sẽ muốn sử dụng một UIView (bản vẽ tùy chỉnh đầy đủ trong-rút lại :), bẫy và theo dõi chạm của nó, và sau đó rút ra kết quả. Bạn có thể lấy ngữ cảnh đồ họa hiện tại bằng UIGraphicsGetCurrentContext(). Đó là đủ để giúp bạn bắt đầu!

+0

Nghe có vẻ tốt, cảm ơn sự thúc đẩy ban đầu. – 0SX

+0

thực sự có âm thanh tốt bạn có thể giúp với mã mẫu để làm điều đó – Marios