Skip to content

Instantly share code, notes, and snippets.

@pvinis
Created March 23, 2016 17:18
Show Gist options
  • Select an option

  • Save pvinis/5d278ef81f2630f815c1 to your computer and use it in GitHub Desktop.

Select an option

Save pvinis/5d278ef81f2630f815c1 to your computer and use it in GitHub Desktop.
if ([direction isEqualToString:kIKBSnapToLineMinX]) {
switch (flipped) {
case kIKBSizeTransformFlippedXAxis:
case kIKBSizeTransformFlippedBothAxis:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleMiddleRight:
snapRect.origin.x = 0;
snapRect.origin.y = change / 2 / aspectRatio;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = change / aspectRatio;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
default:
break;
}
} else {
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change;
snapRect.size.height= 0;
}
break;
case kIKBSizeTransformFlippedNoAxis:
case kIKBSizeTransformFlippedYAxis:
default:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleMiddleLeft:
snapRect.origin.x = - change;
snapRect.origin.y = - change / 2 / aspectRatio;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
case kIKBTransformLayerHandleTopMiddle:
snapRect.origin.x = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = - change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleBottomMiddle:
snapRect.origin.x = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = 0 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleTopLeft:
snapRect.origin.x = - change;
snapRect.origin.y = - change / aspectRatio;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
case kIKBTransformLayerHandleBottomLeft:
snapRect.origin.x = - change;
snapRect.origin.y = 0;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
default:
break;
}
} else {
snapRect.origin.x = - change;
snapRect.origin.y = 0;
snapRect.size.width = change;
snapRect.size.height= 0;
}
break;
}
} else if ([direction isEqualToString:kIKBSnapToLineMidX]) {
switch (flipped) {
case kIKBSizeTransformFlippedXAxis:
case kIKBSizeTransformFlippedBothAxis:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleMiddleRight:
snapRect.origin.x = 0;
snapRect.origin.y = change / 2 / aspectRatio;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = change / aspectRatio;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
default:
break;
}
} else {
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change;
snapRect.size.height= 0;
}
break;
case kIKBSizeTransformFlippedNoAxis:
case kIKBSizeTransformFlippedYAxis:
default:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleMiddleLeft:
snapRect.origin.x = - change;
snapRect.origin.y = - change / 2 / aspectRatio;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
case kIKBTransformLayerHandleTopMiddle:
snapRect.origin.x = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = - change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleBottomMiddle:
snapRect.origin.x = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = 0 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleTopLeft:
snapRect.origin.x = - change;
snapRect.origin.y = - change / aspectRatio;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
case kIKBTransformLayerHandleBottomLeft:
snapRect.origin.x = - change;
snapRect.origin.y = 0;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
default:
break;
}
} else {
snapRect.origin.x = - change;
snapRect.origin.y = 0;
snapRect.size.width = change;
snapRect.size.height= 0;
}
break;
}
} else if ([direction isEqualToString:kIKBSnapToLineMaxX]) {
switch (flipped) {
case kIKBSizeTransformFlippedXAxis:
case kIKBSizeTransformFlippedBothAxis:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleMiddleLeft:
snapRect.origin.x = - change;
snapRect.origin.y = - change / 2 / aspectRatio;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
case kIKBTransformLayerHandleTopLeft:
snapRect.origin.x = - change;
snapRect.origin.y = - change / aspectRatio;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
case kIKBTransformLayerHandleBottomLeft:
snapRect.origin.x = - change;
snapRect.origin.y = 0;
snapRect.size.width = change;
snapRect.size.height= change / aspectRatio;
break;
default:
break;
}
} else {
snapRect.origin.x = - change;
snapRect.origin.y = 0;
snapRect.size.width = change;
snapRect.size.height= 0;
}
break;
case kIKBSizeTransformFlippedNoAxis:
case kIKBSizeTransformFlippedYAxis:
default:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleMiddleRight:
snapRect.origin.x = 0;
snapRect.origin.y = change / 2 / aspectRatio;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
case kIKBTransformLayerHandleTopMiddle:
snapRect.origin.x = change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = - change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= - change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleBottomMiddle:
snapRect.origin.x = change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = 0 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = - change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= - change * 2 / aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = change / aspectRatio;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change;
snapRect.size.height= - change / aspectRatio;
break;
default:
break;
}
} else {
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change;
snapRect.size.height= 0;
}
break;
}
} else if ([direction isEqualToString:kIKBSnapToLineMinY]) {
switch (flipped) {
case kIKBSizeTransformFlippedYAxis:
case kIKBSizeTransformFlippedBothAxis:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleBottomMiddle:
snapRect.origin.x = change / 2 * aspectRatio;
snapRect.origin.y = 0;
snapRect.size.width = - change * aspectRatio;
snapRect.size.height= - change;
break;
case kIKBTransformLayerHandleBottomLeft:
snapRect.origin.x = change * aspectRatio;
snapRect.origin.y = 0;
snapRect.size.width = - change * aspectRatio;
snapRect.size.height= - change;
break;
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change * aspectRatio;
snapRect.size.height= - change;
break;
default:
break;
}
} else {
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = 0;
snapRect.size.height= - change;
}
break;
case kIKBSizeTransformFlippedNoAxis:
case kIKBSizeTransformFlippedXAxis:
default:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleTopMiddle:
snapRect.origin.x = - change / 2 * aspectRatio;
snapRect.origin.y = - change;
snapRect.size.width = change * aspectRatio;
snapRect.size.height= change;
break;
case kIKBTransformLayerHandleMiddleLeft:
snapRect.origin.x = - change * 2 * aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleMiddleRight:
snapRect.origin.x = 0 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleTopLeft:
snapRect.origin.x = - change * aspectRatio;
snapRect.origin.y = - change;
snapRect.size.width = change * aspectRatio;
snapRect.size.height= change;
break;
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = - change;
snapRect.size.width = change * aspectRatio;
snapRect.size.height= change;
break;
default:
break;
}
} else {
snapRect.origin.x = 0;
snapRect.origin.y = - change;
snapRect.size.width = 0;
snapRect.size.height= change;
}
break;
}
} else if ([direction isEqualToString:kIKBSnapToLineMidY]) {
switch (flipped) {
case kIKBSizeTransformFlippedYAxis:
case kIKBSizeTransformFlippedBothAxis:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleBottomMiddle:
snapRect.origin.x = change / 2 * aspectRatio;
snapRect.origin.y = 0;
snapRect.size.width = - change * aspectRatio;
snapRect.size.height= - change;
break;
case kIKBTransformLayerHandleBottomLeft:
snapRect.origin.x = change * aspectRatio;
snapRect.origin.y = 0;
snapRect.size.width = - change * aspectRatio;
snapRect.size.height= - change;
break;
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = - change * aspectRatio;
snapRect.size.height= - change;
break;
default:
break;
}
} else {
switch (handle) {
case kIKBTransformLayerHandleBottomMiddle:
case kIKBTransformLayerHandleBottomLeft:
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = 0;
snapRect.size.height= - change * 2;
break;
case kIKBTransformLayerHandleTopMiddle:
case kIKBTransformLayerHandleTopLeft:
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = - change * 2;
snapRect.size.width = 0;
snapRect.size.height= change * 2;
break;
default:
break;
}
}
break;
case kIKBSizeTransformFlippedNoAxis:
case kIKBSizeTransformFlippedXAxis:
default:
if (keepProportions) {
switch (handle) {
case kIKBTransformLayerHandleTopMiddle:
snapRect.origin.x = - change / 2 * aspectRatio;
snapRect.origin.y = - change;
snapRect.size.width = change * aspectRatio;
snapRect.size.height= change;
break;
case kIKBTransformLayerHandleMiddleLeft:
snapRect.origin.x = - change * 2 * aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleMiddleRight:
snapRect.origin.x = 0 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.origin.y = - change * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.width = change * 2 * aspectRatio * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
snapRect.size.height= change * 2 * (flipped == kIKBSizeTransformFlippedNoAxis ? 1 : -1);
break;
case kIKBTransformLayerHandleTopLeft:
snapRect.origin.x = - change * aspectRatio;
snapRect.origin.y = - change;
snapRect.size.width = change * aspectRatio;
snapRect.size.height= change;
break;
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = - change;
snapRect.size.width = change * aspectRatio;
snapRect.size.height= change;
break;
default:
break;
}
} else {
switch (handle) {
case kIKBTransformLayerHandleBottomMiddle:
case kIKBTransformLayerHandleBottomLeft:
case kIKBTransformLayerHandleBottomRight:
snapRect.origin.x = 0;
snapRect.origin.y = 0;
snapRect.size.width = 0;
snapRect.size.height= - change * 2;
break;
case kIKBTransformLayerHandleTopMiddle:
case kIKBTransformLayerHandleTopLeft:
case kIKBTransformLayerHandleTopRight:
snapRect.origin.x = 0;
snapRect.origin.y = - change * 2;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment