| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- //
- // StitchImage.m
- // StitchingImage
- //
- // Created by Jin on 10/9/15.
- // Copyright © 2015 Jin. All rights reserved.
- //
- #import "StitchingImage.h"
- const CGFloat marginSpaceRatio = 27.0;
- @interface StitchingImage ()
- {
- CGFloat _cellImageViewchrSideLength;
- CGFloat _margin;
- }
- @end
- @implementation StitchingImage
- - (UIImageView *)stitchingOnImageView:(UIImageView *)canvasView withImageViews:(NSArray *)imageViews {
- _margin = canvasView.frame.size.width / marginSpaceRatio;
- return [self stitchingOnImageView:canvasView withImageViews:imageViews marginValue:_margin];
- }
- - (UIImageView *)stitchingOnImageView:(UIImageView *)canvasView withImageViews:(NSArray *)imageViews marginValue:(CGFloat)_marginValue {
- _margin = _marginValue;
- [self generateImageViewSideLengthWithCanvasView:canvasView byImageViewsCount:imageViews.count];
-
- if ([imageViews count] == 1)
- {
- UIImageView* imageView_1 = imageViews[0];
- imageView_1.frame = CGRectMake(0, 0, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
- }
- else if ([imageViews count] == 2)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength) / 2;
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y];
- }
- else if ([imageViews count] == 3)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 2) / 3;
- UIImageView* imageView_1 = imageViews[0];
- imageView_1.frame = CGRectMake((canvasView.frame.size.width - _cellImageViewchrSideLength) / 2, row_1_origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
-
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y + _cellImageViewchrSideLength + _margin];
- }
- else if ([imageViews count] == 4)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 2) / 3;
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y];
- }
- else if ([imageViews count] == 5)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 2 - _margin) / 2;
-
- UIImageView* imageView_1 = imageViews[0];
- imageView_1.frame = CGRectMake((canvasView.frame.size.width - 2 * _cellImageViewchrSideLength - _margin) / 2, row_1_origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
-
- UIImageView* imageView_2 = imageViews[1];
- imageView_2.frame = CGRectMake(imageView_1.frame.origin.x + imageView_1.frame.size.width + _margin, row_1_origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
-
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y + _cellImageViewchrSideLength + _margin];
- }
- else if ([imageViews count] == 6)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 2 - _margin) / 2;
-
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y];
- }
- else if ([imageViews count] == 7)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 3) / 4;
-
- UIImageView* imageView_1 = imageViews[0];
- imageView_1.frame = CGRectMake((canvasView.frame.size.width - _cellImageViewchrSideLength) / 2, row_1_origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
-
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y + _cellImageViewchrSideLength + _margin];
- }
- else if ([imageViews count] == 8)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 3) / 4;
-
- UIImageView* imageView_1 = imageViews[0];
- imageView_1.frame = CGRectMake((canvasView.frame.size.width - 2 * _cellImageViewchrSideLength - _margin) / 2, row_1_origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
-
- UIImageView* imageView_2 = imageViews[1];
- imageView_2.frame = CGRectMake(imageView_1.frame.origin.x + imageView_1.frame.size.width + _margin, row_1_origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y + _cellImageViewchrSideLength + _margin];
- }
- else if ([imageViews count] == 9)
- {
- CGFloat row_1_origin_y = (canvasView.frame.size.height - _cellImageViewchrSideLength * 3) / 4;
- imageViews = [self generatorMatrix:imageViews beginOriginY:row_1_origin_y];
- }
-
- for (UIImageView *imageView in imageViews) {
- [canvasView addSubview:imageView];
- }
-
- return canvasView;
- }
- - (NSArray *)generatorMatrix:(NSArray *)imageViews beginOriginY:(CGFloat)beginOriginY {
- int count = (int)imageViews.count;
-
- int cellCount;
- int maxRow;
- int maxColumn;
- int ignoreCountOfBegining;
-
- if (count <= 4)
- {
- maxRow = 2;
- maxColumn = 2;
- ignoreCountOfBegining = count % 2;
- cellCount = 4;
- }
- else
- {
- maxRow = 3;
- maxColumn = 3;
- ignoreCountOfBegining = count % 3;
- cellCount = 9;
- }
-
- for (int i = 0; i < cellCount; i++) {
- if (i > imageViews.count - 1) break;
- if (i < ignoreCountOfBegining) continue;
-
- int row = floor((float)(i - ignoreCountOfBegining) / maxRow);
- int column = (i - ignoreCountOfBegining) % maxColumn;
-
- CGFloat origin_x = _margin + _cellImageViewchrSideLength * column + _margin * column;
- CGFloat origin_y = beginOriginY + _cellImageViewchrSideLength * row + _margin * row;
-
- UIImageView* imageView = imageViews[i];
- imageView.frame = CGRectMake(origin_x, origin_y, _cellImageViewchrSideLength, _cellImageViewchrSideLength);
-
- }
-
- return imageViews;
- }
- - (void)generateImageViewSideLengthWithCanvasView:(UIView *)canvasView byImageViewsCount:(NSInteger)count {
- CGFloat sideLength = 0.0f;
-
- if (count == 1) {
- sideLength = canvasView.frame.size.width;
- } else if (count >=2 && count <=4) {
- sideLength = (canvasView.frame.size.width - _margin * 3) / 2;
- } else {
- sideLength = (canvasView.frame.size.width - _margin * 4) / 3;
- }
-
- _cellImageViewchrSideLength = sideLength;
- }
- @end
|