Skip to content

Instantly share code, notes, and snippets.

View zmcartor's full-sized avatar

Zach zmcartor

View GitHub Profile
@zmcartor
zmcartor / gist:857c43c821cfcf75e555
Created September 9, 2014 17:25
Zoom Scrollview
- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer {
// 1
CGPoint pointInView = [recognizer locationInView:self.imageView];
// 2
CGFloat newZoomScale = self.scrollView.zoomScale * 1.5f;
newZoomScale = MIN(newZoomScale, self.scrollView.maximumZoomScale);
// 3
CGSize scrollViewSize = self.scrollView.bounds.size;
@zmcartor
zmcartor / gist:9f203d4f15f6310af449
Created September 9, 2014 17:26
Center ScrollView Contents
// Can also be placed within scrollviews layoutSubviews
- (void)centerScrollViewContents {
CGSize boundsSize = self.scrollView.bounds.size;
CGRect contentsFrame = self.imageView.frame;
if (contentsFrame.size.width < boundsSize.width) {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;
} else {
contentsFrame.origin.x = 0.0f;
@zmcartor
zmcartor / gist:b9d25d1c6319428d400c
Created September 16, 2014 14:56
ScrollView direction
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
if(translation.y > 0)
{
NSLog(@"dragging downwards!");
} else
{
NSLog(@"dragging up!");
}
UIBlurEffect *blur =[UIBlurEffecteffectWithStyle:UIBlurEffectStyleDark]; 
UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:blur]; 
blurView.frame = self.hudView.bounds; 
[self.view addSubview:blurView];
UIVisualEffectView *vibrantView = [[UIVisualEffectView alloc] initWithEffect:[UIVibrancyEffect effectForBlurEffect:blur]]; vibrantView.frame = blurView.bounds; 
UILabel *label = [[UILabel alloc] init]; 
[label setFont:[UIFont fontWithName:@"HelveticaNeue" size:33]]; label.frame = CGRectMake(8, 30, 400, 500); 
label.numberOfLines = 0; 
label.text = @"THIS IS VIBRANT TEXT!"; 

// add vibrantView to first blurView
[vibrantView.contentView addSubview:label];
[blurView.contentView addSubview:vibrantView];
@zmcartor
zmcartor / robotRumble.swift
Last active July 13, 2016 01:22
Robot Rumble Noise Generator
import XCPlayground
import AudioKit
let osc = AKWhiteNoise()
let filter = AKLowPassFilter(osc, cutoffFrequency: 200, resonance: 3)
osc.start()
let verb = AKReverb(filter)
verb.dryWetMix = 0.5
hello() { name in
... some code ...
anotherMethod { anotherThing in
.. I'm nested in two closures
}
}
@zmcartor
zmcartor / unwrap.swift
Last active March 23, 2017 19:05
Unwrap from JSON dict with default value
func unwrap<T:Any>(dictionary:[String : AnyObject], key:String, defaultValue:T) -> T {
let value = dictionary[key] as? T ?? defaultValue
return value as T
}
// Can be curried inside a init?(json:NSDictionary) function
let stringAtKey:(String) -> String = { key in
return unwrap(dictionary , key:key, defaultValue:"")
@zmcartor
zmcartor / dynamic-instance-method.m
Created April 17, 2018 15:25
Dynamic Instance Method ObjC
+ (BOOL)resolveInstanceMethod:(SEL)aSEL {
NSString *classname = NSStringFromClass([self class]);
NSString *selectorString = [NSString stringWithFormat:@"insaneInstance%@",classname];
SEL ourSelector = NSSelectorFromString(selectorString);
if (aSEL == ourSelector) {
class_addMethod([self class], aSEL, (IMP)insaneInstanceMethod, "v@:");
return YES;
}
return [super resolveInstanceMethod:aSEL];
}
@zmcartor
zmcartor / class-method.m
Created April 17, 2018 15:27
Dynamic Class Method ObjC
+ (BOOL)resolveClassMethod:(SEL)name {
NSString *classname = NSStringFromClass([self class]);
NSString *selectorString = [NSString stringWithFormat:@"crazyClass%@",classname];
NSLog(@"string is %@", selectorString);
SEL ourSelector = NSSelectorFromString(selectorString);
if (name == ourSelector) {
// adding class method to meta-class
Class ourClass = object_getClass(NSClassFromString(classname));
class_addMethod(ourClass, ourSelector, (IMP)crazyClassMethod, "@v:@");