Skip to content

Instantly share code, notes, and snippets.

@0xMarK
0xMarK / gist:5850441
Created June 24, 2013 14:27
Form fields stepper
- (void) viewWillAppear:(BOOL)animated {
UIToolbar* toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
toolbar.barStyle = UIBarStyleBlackTranslucent;
toolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithTitle:@"Previous" style:UIBarButtonItemStyleBordered target:self action:@selector(previous:)],
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleDone target:self action:@selector(next:)],
nil];
[toolbar sizeToFit];
for (UIView * view in self.view.subviews) {
@0xMarK
0xMarK / gist:8678345
Created January 28, 2014 22:53
Create mask layer with image file
// Create mask layer
UIImage *maskImage = [UIImage imageNamed:@"posterMask"];
CAShapeLayer* maskLayer = [CAShapeLayer layer];
maskLayer.frame = CGRectMake(0, 0, maskImage.size.width,maskImage.size.height);
maskLayer.contents = (__bridge id)maskImage.CGImage;
self.poster.layer.mask = maskLayer;
@0xMarK
0xMarK / gist:8678441
Created January 28, 2014 22:59
A complicated mask with UIBezierPath
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = CGRectMake(0, 0, self.poster.frame.size.width, self.poster.frame.size.height);
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(0.0, 5.0)];
[bezierPath addArcWithCenter:CGPointMake(5.0, 5.0) radius:5.0 startAngle:DEGREES_TO_RADIANS(180) endAngle:DEGREES_TO_RADIANS(-90) clockwise:YES];
[bezierPath addLineToPoint:CGPointMake(107.0, 0.0)];
[bezierPath addArcWithCenter:CGPointMake(107.0, 5.0) radius:5.0 startAngle:DEGREES_TO_RADIANS(-90) endAngle:DEGREES_TO_RADIANS(0) clockwise:YES];
[bezierPath addLineToPoint:CGPointMake(112.0, 89.0)];
[bezierPath addArcWithCenter:CGPointMake(107.0, 89.0) radius:5.0 startAngle:DEGREES_TO_RADIANS(0) endAngle:DEGREES_TO_RADIANS(90) clockwise:YES];
@0xMarK
0xMarK / gist:8678511
Created January 28, 2014 23:03
Adds a white bordered complex shape to a UIView.
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(0.0, 5.0)];
[bezierPath addArcWithCenter:CGPointMake(5.0, 5.0) radius:5.0 startAngle:DEGREES_TO_RADIANS(180) endAngle:DEGREES_TO_RADIANS(-90) clockwise:YES];
[bezierPath addLineToPoint:CGPointMake(5.0, 20.0)];
[bezierPath closePath];
CAShapeLayer *shape = [CAShapeLayer layer];
shape.frame = self.poster.bounds;
shape.path = bezierPath.CGPath;
shape.fillColor = [UIColor clearColor].CGColor;
@0xMarK
0xMarK / MaskHole
Created April 15, 2015 22:46
Mask a hole inside a rect.
// Mask
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.frame = CGRectMake(0, 0, self.notificationsTabBarButton.frame.size.width, self.notificationsTabBarButton.frame.size.height);
CGPoint circleCenter = self.notificationsBadge.center;
CGFloat innerCircleRadius = self.notificationsBadge.frame.size.width/2;
CGFloat circleRadius = innerCircleRadius + 2;
UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:circleCenter radius:circleRadius startAngle:0.0 endAngle:M_PI * 2.0 clockwise:YES];
@0xMarK
0xMarK / KeyValueObserving.swift
Last active July 15, 2019 14:19
SwiftUI (Combine) Publishers
class MyDefaults: BindableObject {
public var didChange: AnyPublisher<Bool, Never>
init() {
let defaults = UserDefaults.standard
didChange = Publishers.Merge(
defaults.publisher(for: \.userOption1),
defaults.publisher(for: \.userOption2)
)
.receive(on: RunLoop.main)
@0xMarK
0xMarK / MyDataModel.swift
Created July 15, 2019 14:25
SwifttUI CoreData integration
class MyDataModel: BindableObject {
var didChange = PassthroughSubject<Void, Never>()
}
extension MyDataModel: NSFetchedResultsControllerDelegate {
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
didChange.send()
}
}
@0xMarK
0xMarK / ChatCollectionView.swift
Created July 25, 2019 09:01
ChatCollectionView
class ChatViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
collectionView.transform = CGAffineTransform.reversed
// .........
}
}
@0xMarK
0xMarK / factorial.swift
Created November 29, 2020 18:39
Factorial
func factorialRecursive(_ number: Int) -> Int {
if number < 3 {
return number
}
return number * factorialRecursive(number - 1)
}
func factorialIterative(_ number: Int) -> Int {
var result = 1
for i in (2...number) {
@0xMarK
0xMarK / fibonacci.swift
Last active November 29, 2020 18:40
Fibonacci
func fibonacciRecursive(_ index: Int) -> Int {
if index < 2 {
return index
}
return fibonacciRecursive(index - 2) + fibonacciRecursive(index - 1)
}
func fibonacciIterative(_ index: Int) -> Int {
if index < 2 {
return index