ã¿ã€ãïŒãã°
ãã©ãããã©ãŒã ïŒ android 4.4 webview
Androidãã©ãããã©ãŒã ã§ã®ã¿ã¿ããåãæ¿ãããšãã¢ããªã¯çœããã©ãã·ã¥ã衚瀺ããŸãã 暪ææ©éã䜿çšããŠããŸããããã©ãŒã©ã æçš¿http://forum.ionicframework.com/t/white-flash-appearing-when-switching-between-tabs-on-android-in-1-0-0-stable/24774
ãã®åé¡ã®ç¶æ³ã«ã€ããŠäœãäžèšïŒ
åãåé¡ããããŸãã æŽæ°ã¯ãããŸããïŒ
+1
ãã®åé¡ãããæå°éã®äŸãæäŸããŠãã ããã
æ°ããã€ãªã³ã¢ããªïŒã¿ããã³ãã¬ãŒãïŒãäœæããã ãã§ãèæ¯ãä»»æã®è²ã«å€æŽããŠããçœã«å€æŽããŸãã Androidããã€ã¹ïŒ4.4ããã¯ãµã¹5ã§ãã¹ãæžã¿ïŒã§ãã«ãããŠå®è¡ãããšãã¿ããå€æŽãããã³ã«æ°ããªã®çœãããªãã¯ã衚瀺ãããŸãã
ããã¯ãåãã¥ãŒã§ã€ãªã³ããããŒããŒãåå®çŸ©ãããŠããããšãåå ã§ããããšãããããŸããã ion-header-barãã¡ã€ã³ã®ã¬ã€ã¢ãŠããã³ãã¬ãŒãã«ç§»åããŸããããã¡ãã€ããèŠãããªããªããŸããã ããã©ã«ãã§çæããããããžã§ã¯ãã§ã¯ãåãã¥ãŒã«ããããŒããŒãé 眮ããããšæããŸãããã®ãããããã«ãããããŒããŒã衚瀺ãããŸãã
'ion-header-bar'sã¯èªåçã«çæãããŸãããã©ãã§ïŒãããŠã©ã®ããã«ïŒæåã§äœ¿çšããŸããïŒ
ããã§ã @ GentryRiggenã¯ãion-nav-barãæå³ããŸããïŒ
@mhartingtonç§ã¯ion-side-menu-contentå ã«ion-tabsãããion-side-menuã䜿çšããŠããŸãã
<ion-side-menus>
<ion-side-menu side="left" class="left-side-menu">
<ion-content drag-content="false" overflow-scroll="false" direction="y" delegate-handle="leftMenu">
<div class="list">
<a menu-close class="item item-icon-left" >Something</a>
<a menu-close class="item item-icon-left" >Something</a>
<a menu-close class="item item-icon-left" >Something</a>
</div>
</ion-content>
</ion-side-menu>
<ion-side-menu-content>
<ion-header-bar align-title="center" class="bar-positive">
<button class="button button-icon icon ion-navicon" menu-toggle="left"></button>
<div class="titles">
<h>TITLE</h1>
</div>
</ion-header-bar>
<ion-tabs class="tabs-positive tabs-icon-only dark-background">
<ion-tab>
<ion-nav-view name="tab-1"></ion-nav-view>
</ion-tab>
<ion-tab>
<ion-nav-view name="tab-2"></ion-nav-view>
</ion-tab>
<ion-tab>
<ion-nav-view name="tab-3"></ion-nav-view>
</ion-tab>
</ion-tabs>
</ion-side-menu-content>
</ion-side-menus>
ãã®ããã«ion-header-barã䜿çšããã®ã§ã¯ãªããion-nav-barã䜿çšããŠãã ããã
@mhartington Imã¯ããion-nav-barããšç»é¢ã®ã¡ãã€ãïŒã¿ãéã移åäžïŒã䜿çšããŠããŸã...
ã§ã¯ãã©ã®ããã«ä¿®æ£ããããšãææ¡ããŸããïŒ
androidçšã«æ§ç¯ãããionicã®ã·ã³ãã«ãªã¿ããã¹ã¿ãŒã¿ãŒãã¯ãããã²ãŒããšãion-nav-barã䜿çšããŠãããšç§ãä¿¡ããŠããéã®ãã©ãã·ã¥ã瀺ããŠããŸãã
ããŒãããã¹ãã§ã¯è¡šç€ºãããŸããã
ãããªã§èŠãããšãã§ããŸã..ã¿ããå€æŽãããšçœãç»é¢ãç¹æ» ããŸã..ã»ãã®æ°ããªç§è¡šç€ºãããŸã...èæ¯è²ãããæ確ã«èµ€ãéããŸãã¯æãè²ã«å€æŽããããšã確èªãããå Žåã
ããªãã¯è²ãããããã²ãŒã·ã§ã³ããŒã«ã€ããŠè©±ããŠããã®ã§ãã
圌ã¯ãã¿ããåãæ¿ãããšäžæçã«è¡šç€ºãããçœãç»é¢ïŒã€ãªã³ã³ã³ãã³ãã®å¢çïŒã«ã€ããŠè©±ããŠããŸãã
åããŠãã¹ããŒã¿ã¹ãããããã£ãããã«åãæ¿ãããšããããªã§ã¯ã£ãããšç¢ºèªã§ããŸãã ããããå®éã«ã¯æ¯å衚瀺ãããŸãã
@mhartingtonã¢ããªãããããªãæ·»ä»ããŸããïŒã¹ããŒã¢ãŒã·ã§ã³ïŒãããã«è¿œå ãããŠããããšãã¯ã£ãããšããããŸãã
ç§ã¯è¡åãèµ·ãããçããããã®åé¡ã解決ããã®ãæäŒãããã®ã§ãããå°ãªããšãããªãããã®åºçºç¹ãå¿
èŠã§ããã©ãããå§ããã°ããã§ããïŒ
YouTubeãªã³ã¯ïŒ https ïŒ
ããããšãã
ã³ãŒãã確èªããŸãããããšã©ãŒã¯tabSelectedé¢æ°ïŒionTabãã£ã¬ã¯ãã£ãïŒã«ãããŸãã
æ°ããã¿ãã衚瀺ããåã«ãåã®ã¿ããé衚瀺ã«ããŠããããã§ãã
ç§ãäœã£ããã®æ±ãããã¯ã¯ããŸãããããã§ãã ããããç§ã¯é©åãªä¿®æ£ãèŠãããšæã£ãŠããŸãã
$ ionicViewSwitcher.viewEleIsActiveïŒchildElementãfalseïŒ;ã®åšãã«ã¿ã€ã ã¢ãŠããè¿œå ããã ãã§ãã
ionic.bundle.jsã®55025è¡ç®
$timeout(function () {
$ionicViewSwitcher.viewEleIsActive(childElement, false);
}, 100);
ããã¯ç§ã«èµ·ãã£ãŠããŸãïŒ
Nexus4ã§Android5.1.1ãå®è¡ããŠããŸãã
ãããåçŸããã«ã¯ããã¿ããã¹ã¿ãŒã¿ãŒã¢ããªãäœæããããã²ãŒã·ã§ã³ããŒã®è²ãéã«å€æŽããã ãã§ïŒããšãã°ã-stableã-positiveã«å€æŽããããšã§ïŒãã¡ãã€ããæããã«ãªããŸãã å®éã«ã¯çœãããã²ãŒã·ã§ã³ããŒã§ã¡ãã€ããŸãããçœãã¡ãã€ãã«çœã¯èŠããŸããã
Androidã§ç§»è¡æéã0ããªç§ã«åŒ·å¶ããã¹ã¿ã€ã«ãè¿œå ããããšããŸããããä»å±ã®Chromeã€ã³ã¹ãã¯ã¿ãŒã確èªããèšç®ãããCSSå€ã調ã¹ãããšã§ãã¢ããªããããã®ã¹ã¿ã€ã«ãããããŒã¢ã€ãã ã«é©çšããŠããããšã確èªããŸããã ã¹ã¿ã€ã«ãåé€ãã0ããªç§ããä»ã®æ°å€ïŒ0.2ããªç§ãŸãã¯0.5ããªç§-å®éã«ã¯ç¹æ» å¹æãšã»ãŒåãéãïŒã«ãªã£ãããšã確èªããŠãããã«ãã§ãã¯ããŸããã
@didbarbosaã®ä¿®æ£ãè©Šã¿ãŸãããããã©ãŠã¶ã®Chromeãšé»è©±ã¢ããªã®äž¡æ¹ã§$ timeoutãå®çŸ©ãããŠããªããšæå¥ãèšããŸããã $ timeoutã®å€ããã°ã«èšé²ãããšããããã¯å®éã«ã¯å®çŸ©ãããŠããŸããã§ããã
@ lloy0076ãã£ã¬ã¯ãã£ãã«æ¿å ¥ããå¿ èŠããããŸã
IonicModule
.directive('ionTab', [
'$compile',
'$ionicConfig',
'$ionicBind',
'$ionicViewSwitcher',
'$timeout',
function($compile, $ionicConfig, $ionicBind, $ionicViewSwitcher,$timeout) {
@ didbarbosa-å®éãç§ã®ããŒãžã§ã³ã®Ionicãææ°ãªãªãŒã¹ã§ã¯ãªãããšã«æ°ã¥ããŸããã ãããã£ãŠããbower.jsonãã次ã®ããã«å€æŽããŸããã
{{
"åå"ïŒ "HelloIonic"ã
ããã©ã€ããŒããïŒãçãã
"devDependencies"ïŒ{
"ionic"ïŒ "driftyco / ionic-bowerïŒã1"ã
"platform.js"ïŒ "platformïŒã1.3.0"
...ãããŠã$ timeoutãœãªã¥ãŒã·ã§ã³ããªããŠãã¡ãã€ãããªããšæããŸãã...
ãã¶ããCSS移è¡ãœãªã¥ãŒã·ã§ã³ã§åãããšãè©Šããå Žåãããèªäœããä¿®æ£ããããå¯èœæ§ããããŸãããã ãããã®ããã«éæ³ã®ããã«ä¿®æ£ãããåé¡ã¯å«ãã§ãã
ã¯ããããã¯æ¯æ©ã®ãªãªãŒã¹ã§æ¶ããããã§ãã
è¯ããã¥ãŒã¹:)
å®éãç§ã«ãšã£ãŠã¯ä¿®æ£ãããŠããŸããã
ç§ã®ããã«ä¿®æ£ãããŠããŸãã2ïŒ\
ãã®åé¡ã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ
iOSã§ããã®åé¡ãçºçããŸãã
iOSã«é¢ãã@harryzunã¯https://github.com/driftyco/ionic/issues/4395ãåç §ããŠ
iOSã§ã¯åãåé¡ã§ã¯ãããŸãã
v1.1ã«ã¢ããã°ã¬ãŒãããåŸãAndroidã§ãããã«æ°ã¥ãå§ããŸããã ããããã€å§ãŸã£ããã¯ããããŸãããã
ããã¯v1é ã«å§ãŸããŸãã
誰ããïŒäžæçãªïŒä¿®æ£ãæã£ãŠãããªããç§ã¯ãããèãããã§ãã
ç§ã¯åããã°ã§ã...誰ããã£ãšæ å ±ããããŸããïŒ ïŒããïŒ
ããããé¢é£ã¯ãããŸãããã以åã«åæ§ã®åé¡ãçºçããŸãããå¥åŠãªçç±ã§ãåé¡ã®ããå
åŒã¿ãã®ç¶æ
ã®ç¶æ
å®çŸ©ããcache: false
ãåé€ãããšãåé¡ã解決ããŸããã ãã®åããã¿ãŒã³ãåãã³ã³ãããŒã©ãŒãšãã³ãã¬ãŒãã®çµã¿åããã§äœ¿çšããŠããã®ã§ãã¿ãèšå®ã®ä»ã®3ã€ã®å Žæã§åé¡ãªã䜿çšããŠããçç±ãããããŸããã
ã ããç§ã¯ãç§ãã¡ãèŠãåé¡ã®æ ¹åºã«ãã©ãçãããã«å°ãæéãè²»ãããŸãããã¡ãã£ãšé¢çœããŠãç§ã®åŽã®å°ãã®çŽ æŽãããstateChangeSuccessã®åã«é»ã®ã¡ãã€ãã«ã€ãªãããŸããã
ãããã£ãŠãåè¿°ã®ããã«ãã¢ããªã±ãŒã·ã§ã³å šäœã§åããã¿ãŒã³ã䜿çšããŸãããéèŠãªéãã1ã€ãããŸãããã®ç¶æ ã§ã¯ãããã¯ãšã³ãã§çŸåšçºçããŠããªãæ¬ ç¹ãåé¿ããããã«ãç¶æ å®çŸ©ã§APIã«è£æã¡ããã解決ãå®éã«è¡ãããŸããããã®ãã¿ãŒã³ã䜿çšããä»ã®x3ç¶æ ã§èª¬æããå¿ èŠããããŸãã
ããã£ãããç¶æ ã¯ãã¿ãã®ã¡ã€ã³ç¶æ ã®å åŒã§ããã ãã®ç¶æ ã«å°éããã«ã¯ãã¡ã€ã³ãã¥ãŒã§ã¡ã³ããŒãã¯ãªãã¯ããã ãã§ãå åŒãã£ããç¶æ ã«ãªããŸãã å åŒããããã²ãŒããããšãé»ããã©ãã·ã¥ã¯èŠ³å¯ãããã解決ãå®äºãããŸã§ã¡ã€ã³ç¶æ ã衚瀺ããããã®åŸãéåžžã®ããã²ãŒã·ã§ã³ãçµäºããŸãã ãã£ãããã¥ãŒãå±¥æŽã®çŸåšã®ç¶æ ãšããŠïŒå¥ã®ã¿ãããïŒã¿ãã«æ»ããšãui-router + ionicã¯ããã«æ°ããã¿ããžã®ã¹ã¯ãããå®è¡ããŸããã解決ãå®äºãããŸã§é»ãç»é¢ã衚瀺ãããŸãã
ããã¯ã cache: false
ãåé€ããããã©ã«ãã§trueã«èšå®ããŠåé¡ãä¿®æ£ããçç±ã«ã€ããŠãæå³ããããŸãã
ããªããããã«ã€ããŠèãããšããç§ãæšæž¬ãããšããå®å šã«çã«ããªã£ãŠããŸãã ããŸãããã°ãããã¯èª°ããã°ãŒã°ã«çµç±ã§ããã«ééããå Žåã«é çãæãããšãã§ãããããããŸããïŒç§ãããã®ãšåãæ¹æ³ã§ïŒã
ç§ã¯ããã次ã®è¡ãŸã§è¿œè·¡ããŸããïŒ
https://github.com/driftyco/ionic/blob/af1bfef327e685585244c6051c4d38b98aa6c62a/js/angular/service/viewSwitcher.js#L194
if (renderStart && renderEnd) {
// CSS "auto" transitioned, not manually transitioned
// wait a frame so the styles apply before auto transitioning
//$timeout(onReflow, 16); <- original
onReflow(); // removes flicker
} else if (!renderEnd) {
æ°ããã¿ãã¯16ããªç§åŸãŸã§è¡šç€ºãããããã«èšå®ãããŠããªããããã¿ããåãæ¿ãããšãã«1ãã¬ãŒã ãã¡ãã€ãåå ã«ãªããŸãã
ã¿ããé¢ä¿ããŠãããšãã®ãã®è¡ã®ãã€ã³ãã¯ããããŸãããã $timeout
åŒã³åºããonReflow()
åçŽãªã¡ãœããåŒã³åºãã«çœ®ãæãããšãç¥èŠãããããã©ãŒãã³ã¹ã倧å¹
ã«åäžããã¡ãã€ãã¯ãããããŸããã ããã²ãŒã·ã§ã³ããŒã§ããããŸããã
@mhartingtonããã«é¢ããŠäœãèãã¯ãããŸããïŒ ãããããå°ãªããšãæ§æå¯èœã«ããå¿ èŠããããŸãã
@adamdbradleyã®https://github.com/driftyco/ionic/commit/8ebde73d0b8afac1bf1c1787c90a72a28a88bc3aã«ãã£ãŠå°å ¥ãããããã§ã
ç·šéïŒããè¯ãä¿®æ£ã¯ã if
æ¡ä»¶ã次ã®ããã«å€æŽããããšã§ãã
if (direction !== 'swap' && renderStart && renderEnd) {
Edit2ïŒæœåšçãªå¯äœçšãåãé€ãããã«è¯ãä¿®æ£ã¯ã $timeout
åŒã³åºãã次ã®ããã«çœ®ãæããããšã§ãã
ionic.requestAnimationFrame(onReflow);
äžç·ã«PRãéããŸãã
ãªãŒãã³PRhttps ïŒ//github.com/driftyco/ionic/pull/4654
éåžžã«ãããããŸããïŒ
ç§ã®åé¡ãä¿®æ£ããŸãã
ã©ããããããšãã
ããŸããããŸããã§ãã... ionic-angular.jsãã¡ã€ã«ãæŽæ°ããŸããããåæã¿ã€ã ã¢ãŠãå€ãå¢ãããŠãå€æŽããããŸããã ç§ã¯äœãã足ããªãã®ã§ããïŒ
ããã²ãŒã·ã§ã³ããŒã®ã¡ãã€ãã«ã€ããŠã¯ããã®ä¿®æ£https://forum.ionicframework.com/t/flickering-when-navigating-via-tabs-on-android/27281ã䜿çšããŸããããã³ã³ãã³ããã¡ãã€ããŸãã
æçµçã«ã¯æ©èœããŠããŸãããã¿ãããšã«æåã«1åç¹æ» ããŸããçç±ã¯äœã§ããïŒ
ãã®åé¡ã«é¢ãããªãªãŒã¹èšç»ã¯ãããŸããïŒ 1.2ãŸãã¯1.3ïŒ
æè¿ã®1.2ãªãªãŒã¹ã«å«ãŸããŠããŸãã
+1ãä»ã«è§£æ±ºçã¯ãããŸããïŒ
ãããŒãããã¯ãŸã ç¶ããŠããŸãããããš..ã³ã¢ããŒã ãç解ããããšã¯ããããäœã§ãããã«ã€ããŠã®è¯ãèããæã£ãŠããã§ããããïŒ
1.2ã¯ãããä¿®æ£ããŸãããïŒ ãã®åé¡ã«å¯ŸåŠããã¯ãã®ã³ããããããã«ãããŸããã
ãã°ã¯ãŸã 1.2ãã1.2.2ã«ãããŸã
ç§ã¯åè©Šè¡ããŸããããããŠããªãã眮ããªãã°ããã¯è§£æ±ºãããŸãïŒ
ionic.requestAnimationFrame(onReflow);
圌ãèšã£ãããã«ããããŠããã§ã¯ãããŸããïŒ
$timeout(function() {
ionic.requestAnimationFrame(onReflow);
});
æããã«ã$ timeoutã¯äœããããŠããŸã
@mlynchå€åããªãã¯ãããäœã®ããã ã£ããèŠããŠããŸããïŒ https://github.com/driftyco/ionic/commit/d0246cf975bb4022eb890d3b0c28964e3065644c#diff -e25bdd32bda2f4f00f01c823ec86b1f3
åã³ãããå£ããããã§ãã
å€åãããçç±ã§ãïŒ
ã³ãŒãã$ timeoutã䜿çšããŠãã¥ãŒã«å ¥ããããŠããå ŽåãDOMãAngularã«ãã£ãŠæäœãããåŸãããã³ãã©ãŠã¶ãŒãã¬ã³ããªã³ã°ãããåŸã«å®è¡ããå¿ èŠããããŸãïŒå Žåã«ãã£ãŠã¯ã¡ãã€ããçºçããå¯èœæ§ããããŸãïŒ
1.2.5ã®ã¬ãã¥ãŒ
æ®å¿µãªãããããã«ããïŒ4782ãå£ããèé¢ãã¥ãŒãæ£ããã¢ãã¡ãŒã·ã§ã³åãããªãããšããããŸããã $timeout
åé€ããããšã¯ãããããããã«å¯Ÿãã解決çãšããŠã¯åçŽãããŸãã
ã¿ã€ã ã¢ãŠããåé€ããŠãåé¡ã¯è§£æ±ºããŸããã
+1
ãã®åé¡ããããŸã...
+1
+1
bower.jsonãæŽæ°ãããšïŒæ£ãã匷調衚瀺ãïŒåœ¹ç«ã¡ãŸãããåè¿°ã®ããã«ããããªé 延ããããŸãã
{{
"åå"ïŒ "HelloIonic"ã
ããã©ã€ããŒããïŒãçãã
"devDependencies"ïŒ{
"ionic"ïŒ "driftyco / ionic-bowerïŒ1.7.12"ã//ããã§ãæŽæ°ãããŠããããšã確èªããŠãã ãã
"aws-sdk-js"ïŒ "ã2.0.9"ã
"ããŒãã¹ãã©ãã"ïŒ "ã3.2.0"ã
"platform.js"ïŒ "platformïŒã1.3.1"
}
}
ãšã«ãããããããªãã©ãã·ã¥ã¯ã¢ã³ããã€ãã ãã«ãããããã¯ã»ãã®äžç¬ã§ãã
1.2.3 "copenhagen"
ãã®åé¡ãä¿®æ£ããããšã誰ãã確èªã§ããŸããïŒ
@ mhartington @ mlynchããŒãžã§ã³1.2.3ã§ã¯ããããŸã æ©èœããŠããªãããšã確èªã§ããŸãã ãããã®äžé£ã®ã¹ã¯ãªãŒã³ã·ã§ãããèŠãŠãã ããã
ç§ã¯æåã«æ¬¡ã®ããã«[è«æ±æž]ã¿ãããå§ããŸãã
次ã«ã[ã«ãŒã ã¡ã€ã]ã¿ããã¿ãããããšã次ã®æé ãå®è¡ãããŸãïŒç¹æ» ãçºçããŸãïŒã
ããããã¹ãŠã®æé ãçµã¿åããããšãã¿ããåãæ¿ãããšãã«æãããã¡ãã€ããçºçããŸãã
ãã°ã®åœ±é¿ã確èªããã«ã¯ã次ã®ãããªãã芧ãã ããã
https://dl.dropboxusercontent.com/u/97539058/Bugs/tabs-bug.mp4
ãããç§ã®ãã°ãç§ã®ã¢ããªã±ãŒã·ã§ã³ã§SQLiteã䜿çšããéã®åé¡ã§ããããšã«æ°ã¥ããŸããã æ··ä¹±ãããŠç³ãèš³ãããŸããã
+1
+1
+1
ã¿ã€ã ã¢ãŠãã®åé¡ã®ããã§ã
åé¡ã¯ç§ã«ãšã£ãŠã¡ããã©æ¶ããŸããïŒ ãã®åé¡ã¯ãã¿ãã®äœææ¹æ³ã«é¢é£ããŠããŸããã
ã¿ãå
ã®ããã²ãŒã·ã§ã³ãé©åãªæ¹æ³ã§æ§ç¯ããããã«ããŠãã ããã ã³ã³ãããŒã©ã®èŠªã«æ³šæããŠãã ãã==>å
ãã以äžçœããã©ãã·ã¥ã¯ãããŸãã
@princefr詳ãã説æããŠããããŸããïŒ
iOSã®å Žåãionic.bundle.jsè¡47715ããã³47750ã§css [ionic.CSS.TRANSITION_DURATION]ãcss.WebkitTransitionã«çœ®ãæããå¿ èŠããããŸããã
`// iOSã®ç§»è¡
// -----------------------
provider.transitions.views.ios = functionïŒenteringEleãleaveEleãdirectionãshouldAnimateïŒ{
function setStyles(ele, opacity, x, boxShadowOpacity) {
var css = {};
css.WebkitTransition = d.shouldAnimate ? '' : 0;
css.opacity = opacity;
if (boxShadowOpacity > -1) {
css.boxShadow = '0 0 10px rgba(0,0,0,' + (d.shouldAnimate ? boxShadowOpacity * 0.45 : 0.3) + ')';
}
css[ionic.CSS.TRANSFORM] = 'translate3d(' + x + '%,0,0)';
ionic.DomUtil.cachedStyles(ele, css);
}
var d = {
run: function(step) {
if (direction == 'forward') {
setStyles(enteringEle, 1, (1 - step) * 99, 1 - step); // starting at 98% prevents a flicker
setStyles(leavingEle, (1 - 0.1 * step), step * -33, -1);
} else if (direction == 'back') {
setStyles(enteringEle, (1 - 0.1 * (1 - step)), (1 - step) * -33, -1);
setStyles(leavingEle, 1, step * 100, 1 - step);
} else {
// swap, enter, exit
setStyles(enteringEle, 1, 0, -1);
setStyles(leavingEle, 0, 0, -1);
}
},
shouldAnimate: shouldAnimate && (direction == 'forward' || direction == 'back')
};
return d;
};
provider.transitions.navBar.ios = functionïŒenteringHeaderBarãLeavingHeaderBarãdirectionãshouldAnimateïŒ{
function setStyles(ctrl, opacity, titleX, backTextX) {
var css = {};
css.WebkitTransition = d.shouldAnimate ? '' : '0ms';
css.opacity = opacity === 1 ? '' : opacity;
ctrl.setCss('buttons-left', css);
ctrl.setCss('buttons-right', css);
ctrl.setCss('back-button', css);
css[ionic.CSS.TRANSFORM] = 'translate3d(' + backTextX + 'px,0,0)';
ctrl.setCss('back-text', css);
css[ionic.CSS.TRANSFORM] = 'translate3d(' + titleX + 'px,0,0)';
ctrl.setCss('title', css);
}
function enter(ctrlA, ctrlB, step) {
if (!ctrlA || !ctrlB) return;
var titleX = (ctrlA.titleTextX() + ctrlA.titleWidth()) * (1 - step);
var backTextX = (ctrlB && (ctrlB.titleTextX() - ctrlA.backButtonTextLeft()) * (1 - step)) || 0;
setStyles(ctrlA, step, titleX, backTextX);
}
function leave(ctrlA, ctrlB, step) {
if (!ctrlA || !ctrlB) return;
var titleX = (-(ctrlA.titleTextX() - ctrlB.backButtonTextLeft()) - (ctrlA.titleLeftRight())) * step;
setStyles(ctrlA, 1 - step, titleX, 0);
}
var d = {
run: function(step) {
var enteringHeaderCtrl = enteringHeaderBar.controller();
var leavingHeaderCtrl = leavingHeaderBar && leavingHeaderBar.controller();
if (d.direction == 'back') {
leave(enteringHeaderCtrl, leavingHeaderCtrl, 1 - step);
enter(leavingHeaderCtrl, enteringHeaderCtrl, 1 - step);
} else {
enter(enteringHeaderCtrl, leavingHeaderCtrl, step);
leave(leavingHeaderCtrl, enteringHeaderCtrl, step);
}
},
direction: direction,
shouldAnimate: shouldAnimate && (direction == 'forward' || direction == 'back')
};
return d;
}; `
ãã®è¡https://github.com/driftyco/ionic/blob/master/js/angular/service/viewSwitcher.js#L142ã次ã®ããã«å€æŽãããšãä¿®æ£ãããããã§ãã
callback && ionic.requestAnimationFrame(callback);
ãããããããä¿®æ£ããæ£ããæ¹æ³ãã©ããã¯ããããŸããã
ããã¯iOSã®äžéšã®ãªãªãŒã¹ã§ãçºçããŸããïŒã¬ããŒãã¯AndroidãªãªãŒã¹ã«é¢ãããã®ã§ããããšãæãåºããŠãã ããïŒïŒ
å·®åºäººïŒAbdul Wahab [mailtoïŒ[email protected]]
éä¿¡æ¥ïŒ2016幎2æ10æ¥æ°Žææ¥ååŸ9æ59å
å®å
ïŒdriftyco / ionic [email protected]
CcïŒããããã»ãã€ã[email protected]
件åïŒReïŒ[ionic]ãã°ïŒAndroidã§ã¿ããåãæ¿ãããšçœããã©ãã·ã¥ã衚瀺ãããïŒïŒ3907ïŒ
iOSã®å Žåãionic.bundle.jsè¡47715ããã³47750ã§css [ionic.CSS.TRANSITION_DURATION]ãcss.WebkitTransitionã«çœ®ãæããå¿ èŠããããŸããã
`// iOSã®ç§»è¡
// -----------------------
provider.transitions.views.ios = functionïŒenteringEleãleaveEleãdirectionãshouldAnimateïŒ{
é¢æ°setStylesïŒeleãopacityãxãboxShadowOpacityïŒ{
var css = {};
css.WebkitTransition = d.shouldAnimateïŒ ''ïŒ0;
css.opacity =äžéæ床;
ifïŒboxShadowOpacity> -1ïŒ{
css.boxShadow = '0 0 10px rgbaïŒ0,0,0ã' +ïŒd.shouldAnimateïŒboxShadowOpacity * 0.45ïŒ0.3ïŒ+ 'ïŒ';
}
css [ionic.CSS.TRANSFORM] = 'translate3dïŒ' + x + 'ïŒ
ã0,0ïŒ';
ionic.DomUtil.cachedStylesïŒeleãcssïŒ;
}
var d = {
å®è¡ïŒfunctionïŒstepïŒ{
ifïŒdirection == 'forward'ïŒ{
setStylesïŒenteringEleã1ãïŒ1-stepïŒ* 99ã1-stepïŒ; // 98ïŒ
ããéå§ãããšãã¡ãã€ããé²ããŸã
setStylesïŒleavingEleãïŒ1- 0.1 * stepïŒãstep * -33ã-1ïŒ;
} else if (direction == 'back') {
setStyles(enteringEle, (1 - 0.1 * (1 - step)), (1 - step) * -33, -1);
setStyles(leavingEle, 1, step * 100, 1 - step);
} else {
// swap, enter, exit
setStyles(enteringEle, 1, 0, -1);
setStyles(leavingEle, 0, 0, -1);
}
}ã
shouldAnimateïŒshouldAnimate &&ïŒæ¹å== 'é²ã' ||æ¹å== 'æ»ã'ïŒ
};
dãè¿ã;
};
provider.transitions.navBar.ios = functionïŒenteringHeaderBarãLeavingHeaderBarãdirectionãshouldAnimateïŒ{
é¢æ°setStylesïŒctrlãopacityãtitleXãbackTextXïŒ{
var css = {};
css.WebkitTransition = d.shouldAnimateïŒ ''ïŒ '0ms';
css.opacity = opacity === 1ïŒ ''ïŒäžéæ床;
ctrl.setCssïŒ 'buttons-left'ãcssïŒ;
ctrl.setCssïŒ 'buttons-right'ãcssïŒ;
ctrl.setCssïŒ 'æ»ããã¿ã³'ãcssïŒ;
css [ionic.CSS.TRANSFORM] = 'translate3dïŒ' + backTextX + 'pxã0,0ïŒ';
ctrl.setCssïŒ 'back-text'ãcssïŒ;
css [ionic.CSS.TRANSFORM] = 'translate3dïŒ' + titleX + 'pxã0,0ïŒ';
ctrl.setCssïŒ 'title'ãcssïŒ;
}
é¢æ°enterïŒctrlAãctrlBãstepïŒ{
ifïŒïŒctrlA ||ïŒctrlBïŒreturn;
var titleX =ïŒctrlA.titleTextXïŒïŒ+ ctrlA.titleWidthïŒïŒïŒ*ïŒ1-ã¹ãããïŒ;
var backTextX =ïŒctrlB &&ïŒctrlB.titleTextXïŒïŒ-ctrlA.backButtonTextLeftïŒïŒïŒ*ïŒ1-ã¹ãããïŒïŒ|| 0;
setStylesïŒctrlAãstepãtitleXãbackTextXïŒ;
}
é¢æ°leaveïŒctrlAãctrlBãstepïŒ{
ifïŒïŒctrlA ||ïŒctrlBïŒreturn;
var titleX =ïŒ-ïŒctrlA.titleTextXïŒïŒ-ctrlB.backButtonTextLeftïŒïŒïŒ-ïŒctrlA.titleLeftRightïŒïŒïŒïŒ*ã¹ããã;
setStylesïŒctrlAã1-stepãtitleXã0ïŒ;
}
var d = {
å®è¡ïŒfunctionïŒstepïŒ{
var enterHeaderCtrl = enterHeaderBar.controllerïŒïŒ;
var LeaveingHeaderCtrl = LeaveingHeaderBar && LeaveingHeaderBar.controllerïŒïŒ;
ifïŒd.direction == 'back'ïŒ{
LeaveïŒenteringHeaderCtrlãleaveHeaderCtrlã1-ã¹ãããïŒ;
enterïŒleavingHeaderCtrlãenteringHeaderCtrlã1-ã¹ãããïŒ;
} ããããªããš {
enterïŒenteringHeaderCtrlãLeavingHeaderCtrlãstepïŒ;
LeaveïŒleavingHeaderCtrlãenteringHeaderCtrlãstepïŒ;
}
}ã
æ¹åïŒæ¹åã
shouldAnimateïŒshouldAnimate &&ïŒæ¹å== 'é²ã' ||æ¹å== 'æ»ã'ïŒ
};
dãè¿ã;
}; `
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubhttps ïŒ //github.com/driftyco/ionic/issues/3907#issuecomment-182324500ã§è¡šç€ºããŠhttps://github.com/notifications/beacon/ABHsBD1Sp3tXsq8707UTfdVHgqSlxI0zks5pixaSgaJpZM4E82pl.gif
+1
ã¢ã³ããã€ãã§ç¹æ»
ããŸãã
1+
+1
æœåºãšã¬ã³ããªã³ã°ãã¹ã ãŒãºã«è¡ãããåã«ããŒãžããã£ãã·ã¥ãããããã«ããç¶æ ãã§ããã£ãã·ã¥ïŒçããå®è¡ããŸãã
@ Harish-hereåããŠã¯ã©ãã§ããïŒ
ããããã£ãã·ã¥ã䜿çšããã®ã¯æ¬åœã«è¯ãèãã§ã¯ãããŸããïŒãããã®ç®çã®ããã ãã«åœãŠã¯ãŸããŸã
@ Harish-ããã ã ç°ãªãããŒãžã«åãç¶æ
ã䜿çšããã¢ããªããããŸãã ã€ãŸããããã€ãã®$ stateãã©ã¡ãŒã¿ããšã詳现ãã¥ãŒã§ãã åããã¥ãŒã§ã³ã³ãã³ããç°ãªããããcacheïŒfalseã䜿çšã§ããŸãã:)
ãããŠãããã¯ãã®ç¹å®ã®åé¡ã«ã€ããŠãè¯ãèãã§ã¯ãªãããã§ã
ããã§ãåãåé¡ã1.2.4-nightly-1917ãå®è¡ããŠããŸã
+1
@ princefr-ã¯ããã¿ãããã®åé¡ã軜æžããããã®é©åãªããŒã¯ã¢ãããäœã§ãããã«ã€ããŠè©³ãã説æããŠãã ãã
@princefrã¿ãã®æ§é ã«ã€ããŠè©³ãã
ããã¯ç§ã«ãšã£ãŠãŸã åé¡ã§ãããéåžžã«èç«ããããã®ã§ãã åããç解ãããŠãã解決çã¯ãããŸããïŒ
+1
+1
ãã®ææ¥ã®äººã ã調ã¹ãŠãã ããïŒ ïŒãã€ãªïŒ
iOSã«é¢é£ããåé¡ããããä»å€ããã«ãªã³ã¯ããŸãã ç§ã¯ãããåçŸããããšãã§ããŸããã
ããããšã@mhartingtonïŒ
ããã«ã³ã³ããã¹ããè¿œå ããããã«ãç§ã®ç¶æ³ã§ã¯ããã°ã次ã®ããã«ååšããããšãããããŸããã
Index.html
<ion-nav-view></ion-nav-view>
ãã¥ãŒ-1.html
<ANY ELEMENT>Something</ANY ELEMENT><ion-nav-view></ion-nav-view>
ãµããã¥ãŒ-1.html
<ANY></ANY>
ããããview-1.htmlãã<ANY ELEMENT>
ãåé€ãããšãã¯ååšããŸããã
ãããã£ãŠãç§ã®å Žåã芪ç¶æ ã®ã³ã³ãã³ããå®å šã«çœ®ãæããããšãªãã芪ç¶æ ã®å éšã«åç¶æ ã衚瀺ãããšããæãŸããå¹æãéæããããšã¯ã§ããŸããã
ui-view / ion-view / ion-nav-view / ion-tabs / ion-pane / etcã®ãã¹ãŠã®æ¹æ³ãè©ŠããŸããã ãŸã£ããäœãæ©èœããŸããã§ããã
ãã®åé¡ã¯åããã°ã説æããŠããŸãããiOSã§ã¯
@mhartingtonäŒè°ã¢ããªã§ãã¹ãã§ããŸããïŒ ç§ãš@brandyã¯ã©ã¡ãããã¿ããåãæ¿ãããšãã«ããããªãã©ãã·ã¥ãåçŸããããšãã§ããŸããã ããã¯ãšãã¥ã¬ãŒã¿ãŒã䜿çšããŠãããå®éã®ããã€ã¹ã§ã¯ãããŸããã§ããã
ïŒ5888ã®ãã°ã¯ionic2ã«é¢ãããã®ã§ãããã³ãŒãããŒã¹ãåããã°ã«ãªãã»ã©é¡äŒŒããŠãããã©ããã¯ããããŸããã
ãããããã«ææ ¢ããŠãããŠããããšããæ¬åœã«æè¬ããŸãïŒsmileïŒ
ããã§ãç©äºãèŠããšãããã¯ionic 1.2.4ã§iOSãšAndroidã®äž¡æ¹ã«åœ±é¿ãäžããã¯ãã§ããæ£ããã§ããïŒ
ãŸããã¿ãã¹ã¿ãŒã¿ãŒã¢ããªã§ãããåçŸã§ãã人ã¯ããŸããïŒ
@mhartingtonããã¯ã¿ãã¹ã¿ãŒã¿ãŒã¢ããªã«ãããŸããããªãã¯ãã éåžžã«æ³šæããå¿ èŠããããŸãã ãŸãã httpsïŒ//github.com/driftyco/ionic/pull/4654ã§ãããä¿®æ£ããŸããããã©ãããããã¯äœãä»ã®ãã®ãå£ããŸããããããŠãããä¿®æ£ããããšããããã¯åã³å£ããŸããã
ããªããæçš¿ãããããªã§ãããèŠãããšãã§ããŸãïŒ https ïŒ ãã ããïŒ1ãã¬ãŒã ãããã¯éåžžã«éãïŒã
@andreialecuç³ãåãªãããããèŠãŠã
åãã¯ãªãããããªãé ããªããŸãã
PRãèŠãŠãäœãã§ãããã確èªããä»ã®ãã®ãå£ããªãããã«ããŸãïŒgrinïŒ
ããã¿ããªïŒ ã§ããããç§ã¯ããã«ã€ããŠããããåé²ããããšãã§ãããšæããŸãã ç§ã¯èªåã®ãã¹ãã§èŠæ ãã®ããPRãéããŸããããæåã«ããªãããã®ãã£ãŒãããã¯ãèãããã§ãã
viewFlickerãã©ã³ãã«å€æŽãå ããããŸãã
https://github.com/driftyco/ionic/pull/5937
ã³ãŒãããã«ããŠã³ãããœãŒã¹ããIonicããã«ãããã¢ããªã®å€æŽããã¹ãããŠãããŸããªãå Žåã¯ãããã§åé¡ã解決ãããã©ããã確èªãããã®ãã°ãä¿®æ£ã§ããŸãïŒshipitïŒ
çŽ æŽãããã ããã¯Androidåºæã®ãããã§ããããããšãiOSãèŠæ ããè¯ããªããŸããïŒ
@ctcampbell androidATM ã ç§ã®ãã¹ãã§ã¯ãiOSã§ã¡ãã€ããåŒãèµ·ããããšãã§ããŸããã§ãã
ããã¯PRããã¢ããç°¡åãªãããªã§ã
+1
@jordantomaxããã¯ãPRãããŸãæ©èœããããšãæå³ããŸããïŒ ïŒãã€ãªïŒ
ãã£ãšãããããªããã ãã£ãŒãã賌èªããã ãã§ãã ç§ã¯ããããã¹ãããããšãã§ããŸãã 䜿çšããããã«äœããã³ã³ãã€ã«ããå¿ èŠããããŸããïŒãªãªãŒã¹ã¯ããªãã®ã³ãããã«ãã£ãŠåœ±é¿ãåããªãã£ãããã§ãã
ãã
ãããã®æé ã«åŸãããšãã§ããŸãã
git clone https://github.com/driftyco/ionic.git
cd ionic
git checkout viewFlicker
npm install
gulp build
ãããŠãã³ã³ãã€ã«ãããã³ãŒãã¯dist/js/ionic.bundle.js
ã¯ãã§ãã
ãã®ã³ãŒããã³ããŒããŠãã¹ããããžã§ã¯ãã«è²Œãä»ããè©ŠããŠã¿ãããšãã§ããã¯ãã§ãã
ãã¹ãã¿ãã¢ããªã±ãŒã·ã§ã³ã§ããŸãæ©èœããŠããããã§ãã ããã§ããã¢ããªã®ãã©ãã·ã¥ã«åé¡ããããŸãã ã¿ããšã¡ãã¥ãŒã䜿çšããŠããŸãããã¿ãã¯ç¹å®ã®ããŒãžã«ãã衚瀺ãããŸããã ç§ã¯ããªãã«èŠããããã«ãããªãæ®ãããã®ã§ãããã©ãããã°ãããè¡ãããšãã§ããŸããïŒ
代ããã«ãã¯ããŒã³ãäœæããŠãã¹ãã§ããæå°éã®codepenãŸãã¯gitãªããžããªãäœæã§ããŸããïŒ
ã¢ããªã®åæ§ã®èšå®
è¯ãã¢ã€ãã¢ã ä»å€ãææ¥ã®æã«ããããšæããŸãã ãååããã ãããããšãããããŸãã
@mhartingtonã¢ããªã§ãã¹ããããšãããã¡ãã€ãããªããªã£ãããã§ãã ïŒ+1ïŒ
AndroidNãã¬ãã¥ãŒãå®è¡ããŠããNexus6ã6.0.1ãå®è¡ããŠããNexus 7 2013ã5.1ãå®è¡ããŠããMoto X 2014ã4.4.4ãå®è¡ããŠããNexus 7 2013ã§ã¿ãã¹ã¿ãŒã¿ãŒã䜿çšããŠä¿®æ£ããã¹ãããŸããããç¹æ» ã¯èŠãããŸããã§ãããããã®ããã€ã¹ã®ããããã çŽ æŽããã ïŒ
@jordantomaxãã®äŸããŸãšããéã¯ãããŸããïŒ
@mhartingtonç³ãèš³ãããŸããããå®å šã«å§åãããŸããïŒ æ¥ææ¥ã«åãçµãã§ãããããšæããŸãã
@mhartingtonäœæäžã®ã¢ããªã§ããããã¹ããããšãããAndroidãšiPhoneã¯ïŒ5937ã§ä¿®æ£ãããŠããããã§ãã
@jordantomax ãäŸããŸãšããæ©äŒããããŸãããïŒ
ããããšãã
ãã³
ããã
ãã®ä¿®æ£ã¯ããŸãæ©èœããŸãããnative-page-transitionsãã©ã°ã€ã³ãæ£ããæ©èœããŠããªãããã§ã...ãã®ä¿®æ£ãå ããåŸããã©ã³ãžã·ã§ã³ã¯ããããªããšãããŠããŸãã ãªã³ã¯ãããŠãããšæããŸããïŒ
@tgensolãã®ãã©ã°ã€ã³ã®ããã©ã«ããã©ã¡ãŒã¿ã䜿çšããŠãã ããããã®ä¿®æ£ã§ããŸãæ©èœããŸãïŒ
çããããã«ã¡ã¯ïŒ ç§ã®ãã¹ããéããŠãä¿®æ£ããã¹ãããŠããçãããæ©èœããŠããããã«èŠããã®ã§ãä»ã¯ãã®åé¡ã解決ããŸãã @jordantomaxã¯ããã®ãã¹ããäžç·ã«æããæ©äŒãããã°ãé æ ®ãªãæçš¿ããŠãã ãããåãã§åéããŸãïŒïŒããŸããäžèšã®è§£æ±ºçã§åé¡ã解決ããªãå Žåã¯ã ãã°ã¢ã¯ãŒã«å¥ã®åé¡ãéããŠ
ã€ãªã³ã¬ãã®é倧ãªå€æŽã«äŒŽãããããã©ã®ããã«ã³ã³ãã€ã«ããŠæ§ç¯ããã
1.x
ãã©ã³ãã¯Ionic 1.3.1
ã ãªããžããªã®ã¯ããŒã³ãäœæããŠãã©ã³ãããã§ãã¯ã¢ãŠããããšã gulp build
ãå®è¡ããŠé
åžå¯èœãªãã¡ã€ã«ãçæã§ããã¯ãã§ãã ããã§åé¡ãçºçããå Žåã¯ãç¥ãããã ããã
ããããšãã
ãã³
ããããšãã ãã§ã«æåã§distãããŠã³ããŒãããŸããïŒD
+1
ãããä¿®æ£ããŸããã ããã¯ãã€ãªã³ãã¥ãŒã®æŽæ°ã€ãªã³ããŒã®åäœã«é¢é£ããŠçºçããŸããæ°ããããŒãå ¥ååã«äœæãããå€ãããŒïŒçŸåšïŒãé衚瀺ã«ãªããç¹æ» ããŸãã 解決çã¯ãçŸåšã®ããŒã®é衚瀺ãã€ãã³ãéå§åŸãŸã§å»¶æããããšã§ãã ãäžæãªç¹ãããããŸãããããæ°è»œã«ãåãåãããã ããã
@smcreatorã³ãŒãã¹ãããããå ±æã§ããŸããïŒ
ç§ã¯ãŸã åãåé¡ãæ±ããŠããŸã....ã³ãŒãã¹ããããããããšã
ãã®åé¡ã¯æè¿ã®ã€ãªã³ããŒãžã§ã³ã§ä¿®æ£ãããŠãããšæããŸãã
ç§ãåãåé¡ãæ±ããŠããŠã @ princefrããã®å¿çãéµã§ããã ãã¥ãŒã®äžã«è€æ°ã®ããã²ãŒã·ã§ã³ããŒããããŸããã tabs.html
ãã¡ã€ã«ã®å
é ã«ã®ã¿ion-nav-bar
ãè¿œå ããŠãããšãã«ãåé¡ãä¿®æ£ããŸããã
<ion-nav-bar class="my-custom-bar">
<ion-nav-back-button class="button-clear">
<i class="button button-icon ion-android-arrow-back" ng-click="vm.goBack()"></i>
</ion-nav-back-button>
</ion-nav-bar>
<ion-tabs>
....
</ion-tabs>
åé¡ãããããšãïŒ ãã®åé¡ã¯ãå ã®åé¡ã«é¢é£ããªãã³ã¡ã³ããé²ãããã«ããã¯ãããŠããŸãã ãããææ°ããŒãžã§ã³ã®Ionicã§åŒãç¶ãåé¡ã«ãªãå Žåã¯ãæ°ããåé¡ãäœæãããã³ãã¬ãŒããå®å šã«å ¥åãããŠããããšã確èªããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
ãã®ææ¥ã®äººã ã調ã¹ãŠãã ããïŒ ïŒãã€ãªïŒ