appleguy 55b5dff80c [ASLayoutSpec] Initial commit to support visualizing layout specs (with Playground app). (#2554)
* Initial ASLayoutSpecPlayground commit

* Initial exploratory stab at the main challenge of the app - visualizing ASLayoutSpecs

* Halfway through moving debug features out of ASDK framework files and into debug files. Project builds.

* [ASLayoutSpecPlayground] Created new Inspector node, cleaning up internal implementation to start formalizing support for layout spec visualization.

* Workaround for ensuring creation of visualizerNode for ALL layoutspecs

* continued development

* Layout Inspector Work in Progress

* Resizing the playground works in the shrink direction, not for grow.

* added new ASLayoutableInspectorNode features

* Cleaned up examples code.

* Cleaning up  code.

* more code cleanup

* [ASLayoutableInspector] Transition to an ASTableNode-based architecture to support larger numbers of buttons / customizable types.

* [ASLayoutableInspector] Support different layoutable property types to set up buttons that can edit all of them.

* Huy debugging

* Refactored layout inspector code for extensibility.

* Properly lock layoutableContextMap

* Fix context handling in ASDisplayNode:measureWithSizeRange

* Fix ASLayoutSpecPlayground:ViewController:toggleVisualization

* added slider to InspectorCell

* [ASLayoutSpecPlayground] Improvements to propagation of visualize mode, resize handle, minor cleanup.

* Fix to ASEnvironment

* [ASLayoutSpecPlayground] Fix a few minor issues from the merge with latest master.

* Implement layout spec cache

* add pager ndoe

* add more examples

* add more layout examples

* [ASLayoutPlayground] Fix merge issues

* [ASLayoutPlayground] Fix up the example project from the 2.0 API changes.

* [ASLayoutPlayground] Some fixes (#2411)

* [ASLayoutPlayground]: Some fixes
* Fixed crash when tapping descender.
* Fixed setting the item to inspect.
* Fixed button states in inspector node.
* Added sliders for spacingBefore, spacingAfter, ascender.

* [ASLayoutSpecPlayground] Deselect the buttons when editing is over.

* [ASLayoutSpecPlayground] Changed flexGrow/Shrink's values from YES/NO to 1.0/0.0

* [Project] Create new Debug/ directory for advanced tools dedicated to debugging.

* [LayoutSpecPlayground] Rename project without AS in title, to be consistent with LayoutSpecExamples.

* [Bulid] Fix Xcode project to use new Debug subdirectory / group.

* [Bulid] Fix a small merge error.

* [Build] Fix build issue for Framework target.

* [Bulid] Fix podspec to expose InspectorNode header; Remove old-cocoapods emojis from ASDKgram :)

* Move aside ASLayoutSpecPlayground-Swift to match master

* [LayoutSpecPlayground] Cleanup implementation in several files, xcodeproj, etc.

* [ASControlNode] Add comment for new assertion, to be enabled in a separate diff.
2016-11-08 20:16:16 -08:00

93 lines
2.3 KiB
Objective-C

//
// ViewController.m
// ASLayoutSpecPlayground
//
// Created by Hannah Troisi on 3/11/16.
// Copyright © 2016 Hannah Troisi. All rights reserved.
//
#import "ViewController.h"
#import "PlaygroundContainerNode.h"
#import "ASLayoutElementInspectorNode.h"
@interface ViewController () <ASPagerDelegate, ASPagerDataSource, ASLayoutElementInspectorNodeDelegate, PlaygroundContainerNodeDelegate>
@end
@implementation ViewController
{
ASPagerNode *_pagerNode;
ASSizeRange _sizeRange;
}
#pragma mark - Lifecycle
- (instancetype)init
{
_pagerNode = [[ASPagerNode alloc] init];
self = [super initWithNode:_pagerNode];
if (self) {
_pagerNode.delegate = self;
_pagerNode.dataSource = self;
self.navigationItem.title = @"ASLayoutSpec Playground";
self.edgesForExtendedLayout = UIRectEdgeNone;
[ASLayoutElementInspectorNode sharedInstance].delegate = self;
}
return self;
}
#pragma mark - ASPagerNodeDataSource
- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode
{
return [PlaygroundContainerNode containerNodeCount];
}
- (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index
{
return ^{
PlaygroundContainerNode *containerCellNode = [[PlaygroundContainerNode alloc] initWithIndex:index];
containerCellNode.delegate = self;
return containerCellNode;
};
}
// [ASViewController] Override this method to provide a custom size range to the backing node.
// Neccessary to allow the user to stretch / shrink the size of playground container.
- (ASSizeRange)nodeConstrainedSize
{
if (CGSizeEqualToSize(_sizeRange.max, CGSizeZero)) {
return [super nodeConstrainedSize];
}
return _sizeRange;
}
- (ASSizeRange)pagerNode:(ASPagerNode *)pagerNode constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath
{
if (CGSizeEqualToSize(_sizeRange.max, CGSizeZero)) {
return [super nodeConstrainedSize];
}
return _sizeRange;
}
#pragma mark - PlaygroundContainerNodeDelegate
- (void)relayoutWithSize:(ASSizeRange)size
{
// NSLog(@"DELEGATE constrainedSize = %@", NSStringFromCGSize(size.max));
_sizeRange = size;
[self.view setNeedsLayout];
[_pagerNode reloadData];
}
#pragma mark - ASLayoutElementInspectorNodeDelegate
- (void)toggleVisualization:(BOOL)toggle
{
NSLog(@"shouldVisualizeLayoutSpecs:%d", toggle);
[self.node setShouldVisualizeLayoutSpecs:toggle];
}
@end