diff --git a/apps/toolbox/src/box-shadow.ts b/apps/toolbox/src/box-shadow.ts index 379db6b91..9815bc6e2 100644 --- a/apps/toolbox/src/box-shadow.ts +++ b/apps/toolbox/src/box-shadow.ts @@ -11,13 +11,17 @@ export class BoxShadowModel extends Observable { private _selectedBackgroundType: string; private _selectedBorderType: string; private _selectedAnimation: string; - private _boxShadow: string; + private _boxShadow: string = '5 5 1 1 rgba(255, 0, 0, .9)'; background: string; borderWidth: number; borderRadius: number; appliedBoxShadow: string; + get boxShadow(): string { + return this._boxShadow; + } + constructor() { super(); } diff --git a/apps/toolbox/src/box-shadow.xml b/apps/toolbox/src/box-shadow.xml index 64fee8d49..d1d373a95 100644 --- a/apps/toolbox/src/box-shadow.xml +++ b/apps/toolbox/src/box-shadow.xml @@ -9,14 +9,14 @@ - @@ -29,7 +29,7 @@ boxShadow="{{ appliedBoxShadow }}" borderWidth="{{ borderWidth }}" borderRadius="{{ borderRadius }}" - backgroundColor="{{ background }}" + background="{{ background }}" tap="{{ toggleAnimation }}" > @@ -42,7 +42,7 @@ boxShadow="{{ appliedBoxShadow }}" borderWidth="{{ borderWidth }}" borderRadius="{{ borderRadius }}" - backgroundColor="{{ background }}" + background="{{ background }}" tap="{{ toggleAnimation }}" > @@ -55,7 +55,7 @@ boxShadow="{{ appliedBoxShadow }}" borderWidth="{{ borderWidth }}" borderRadius="{{ borderRadius }}" - backgroundColor="{{ background }}" + background="{{ background }}" tap="{{ toggleAnimation }}" > @@ -68,17 +68,33 @@ boxShadow="{{ appliedBoxShadow }}" borderWidth="{{ borderWidth }}" borderRadius="{{ borderRadius }}" - backgroundColor="{{ background }}" + background="{{ background }}" tap="{{ toggleAnimation }}" > + + + + + + - @@ -90,32 +106,53 @@ boxShadow="{{ appliedBoxShadow }}" borderWidth="{{ borderWidth }}" borderRadius="{{ borderRadius }}" - backgroundColor="{{ background }}" + background="{{ background }}" tap="{{ toggleAnimation }}" text="Label"> - - + + + + + + + + + + @@ -146,6 +184,7 @@ + @@ -172,7 +211,7 @@ - + diff --git a/packages/core/ui/styling/background.ios.ts b/packages/core/ui/styling/background.ios.ts index 7ade0ae42..4ab83ff6b 100644 --- a/packages/core/ui/styling/background.ios.ts +++ b/packages/core/ui/styling/background.ios.ts @@ -760,7 +760,10 @@ function drawBoxShadow(nativeView: NativeView, view: View, boxShadow: CSSShadow, function clearBoxShadow(nativeView: NativeView) { nativeView.clipsToBounds = true; - const layer: CALayer = iOSNativeHelper.getShadowLayer(nativeView, 'ns-box-shadow'); + const layer: CALayer = iOSNativeHelper.getShadowLayer(nativeView, 'ns-box-shadow', false); + if (!layer) { + return; + } layer.masksToBounds = true; layer.shadowOffset = CGSizeMake(0, 0); layer.shadowColor = UIColor.clearColor.CGColor; diff --git a/packages/core/utils/native-helper.d.ts b/packages/core/utils/native-helper.d.ts index 074d40a7f..1c0fe311b 100644 --- a/packages/core/utils/native-helper.d.ts +++ b/packages/core/utils/native-helper.d.ts @@ -171,8 +171,9 @@ export namespace iOSNativeHelper { /** * @param nativeView UIView to find shadow layer with * @param name Name of the shadow layer if looking for specifically named layer + * @param create should we create a new layer if not found */ - export function getShadowLayer(nativeView: any /* UIView */, name?: string): any; /* CALayer */ + export function getShadowLayer(nativeView: any /* UIView */, name?: string, create?: boolean): any; /* CALayer */ /** * Create a UIDocumentInteractionControllerDelegate implementation for use with UIDocumentInteractionController diff --git a/packages/core/utils/native-helper.ios.ts b/packages/core/utils/native-helper.ios.ts index e13850d6d..63df160cc 100644 --- a/packages/core/utils/native-helper.ios.ts +++ b/packages/core/utils/native-helper.ios.ts @@ -120,44 +120,86 @@ export namespace iOSNativeHelper { return transform; } - export function getShadowLayer(nativeView: UIView, name?: string): CALayer { - let layer: CALayer; - name = name || 'ns-shadow-layer'; - if (nativeView) { - if (nativeView.layer) { - if (nativeView.layer.name === name) { - console.log('- found shadow layer - reusing.'); - return nativeView.layer; - } else { - if (nativeView.layer.sublayers && nativeView.layer.sublayers.count) { - console.log('nativeView.layer.sublayers.count:', nativeView.layer.sublayers.count); - for (let i = 0; i < nativeView.layer.sublayers.count; i++) { - console.log(`layer ${i}:`, nativeView.layer.sublayers.objectAtIndex(i)); - console.log(`layer ${i} name:`, nativeView.layer.sublayers.objectAtIndex(i).name); - if (nativeView.layer.sublayers.objectAtIndex(i).name === name) { - return nativeView.layer.sublayers.objectAtIndex(i); - } - } - if (nativeView instanceof UITextView) { - layer = nativeView.layer.sublayers.objectAtIndex(1); - } else { - layer = nativeView.layer.sublayers.objectAtIndex(nativeView.layer.sublayers.count - 1); - } - } else { - layer = nativeView.layer; - } + export function getShadowLayer(nativeView: UIView, name: string = 'ns-shadow-layer', create: boolean = true): CALayer { + return nativeView.layer; + + console.log(`--- ${create ? 'CREATE' : 'READ'}`); + + /** + * UIView + * -> Shadow + * + * + * UIView + * -> UIView + * -> Shadow + */ + + if (!nativeView) { + return null; + } + + if (!nativeView.layer) { + // should never hit this? + console.log('- no layer! -'); + return null; + } + + // if the nativeView's layer is the shadow layer? + if (nativeView.layer.name === name) { + console.log('- found shadow layer - reusing.'); + return nativeView.layer; + } + + console.log('>> layer :', nativeView.layer); + if (nativeView.layer.sublayers?.count) { + const count = nativeView.layer.sublayers.count; + for (let i = 0; i < count; i++) { + const subLayer = nativeView.layer.sublayers.objectAtIndex(i); + + console.log(`>> subLayer ${i + 1}/${count} :`, subLayer); + console.log(`>> subLayer ${i + 1}/${count} name :`, subLayer.name); + + if (subLayer.name === name) { + console.log('- found shadow sublayer - reusing.'); + return subLayer; } - } else { - // could this occur? - console.log('no layer!'); } + // if (nativeView instanceof UITextView) { + // return nativeView.layer.sublayers.objectAtIndex(1); + // } else { + // return nativeView.layer.sublayers.objectAtIndex(nativeView.layer.sublayers.count - 1); + // } } - console.log('layer.name:', layer.name); - if (!layer.name) { - // only explicitly name if the developer had not named it themselves and/or some other integration - layer.name = name; + // else { + // layer = nativeView.layer; + // } + + // we're not interested in creating a new layer + if (!create) { + return null; } - return layer; + + console.log(`- adding a new layer for - ${name}`); + + const viewLayer = nativeView.layer; + const newLayer = CALayer.layer(); + + newLayer.name = name; + newLayer.zPosition = 0.0; + // nativeView.layer.insertSublayerBelow(newLayer, nativeView.layer) + // newLayer.insertSublayerAtIndex(nativeView.layer, 0) + // nativeView.layer.zPosition = 1.0; + // nativeView.layer.addSublayer(newLayer); + + // nativeView.layer = CALayer.layer() + + nativeView.layer.insertSublayerAtIndex(newLayer, 0); + // nativeView.layer.insertSublayerAtIndex(viewLayer, 1) + + // nativeView.layer.replaceSublayerWith(newLayer, nativeView.layer); + + return newLayer; } export function createUIDocumentInteractionControllerDelegate(): NSObject {