Возможны две проблемы:
Как указано в документации для addBoundaryTimeObserver
:
Вы должны поддерживать строгую ссылку на возвращаемое значение как Пока вы хотите, чтобы наблюдатель вызывал наблюдатель времени
blockquote>Поскольку ваш исходный код не сохраняет ссылку на возвращенный внутренний непрозрачный наблюдатель времени, наблюдатель, вероятно, освобождается немедленно и, следовательно, никогда не будет называется.
Убедитесь, что время, которое вы регистрируете для наблюдения, действительно имеет правильное значение:
asset
может быть неизвестна, или неточная оценка, в зависимости от типа актива и состояния загрузки (снова, см. документацию AVAsset.duration
на это). Как следствие, время, которое вы регистрируете для наблюдения, может никогда не быть достигнуто (обратите внимание, что время можно легко проверить, вставив CMTimeShow(duration)
)
[1124 ] Подходы для решения этой проблемы:
, если вы просто хотите остановить игрока, когда достигнут конец playerItem, установки player.actionAtItemEnd
в pause
может быть достаточно
если вам нужно выполнить некоторую настраиваемую логику, когда достигается конец элемента, зарегистрируйте наблюдателя для уведомлений AVPlayerItemDidPlayToEndTime
с playerItem в качестве объекта. Этот механизм не зависит от, возможно, точных длительностей и, следовательно, более надежен
Существует beforeShowDay
опция, которая берет функцию, которую назовут для каждой даты, возвращая true, если дата позволяется или ложь, если это не. Из документов:
beforeShowDay
Функция берет дату в качестве параметра и должна возвратить массив с [0] равный истинному/ложному указанию, можно ли эта дата выбрать и 1 равное имени (именам) класса CSS или '' для презентации по умолчанию. Это называют в течение каждого дня в datepicker, прежде чем будет отображенный.
Отобразите некоторые национальные праздники в datepicker.
$(".selector").datepicker({ beforeShowDay: nationalDays})
natDays = [
[1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'],
[4, 27, 'za'], [5, 25, 'ar'], [6, 6, 'se'],
[7, 4, 'us'], [8, 17, 'id'], [9, 7, 'br'],
[10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke']
];
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][0] - 1
&& date.getDate() == natDays[i][1]) {
return [false, natDays[i][2] + '_day'];
}
}
return [true, ''];
}
Один созданный в функции существует, названный noWeekends, который предотвращает выбор дней выходных дней.
$(".selector").datepicker({ beforeShowDay: $.datepicker.noWeekends })
Для объединения этих двух Вы могли сделать что-то как (принятие nationalDays
функционируйте сверху):
$(".selector").datepicker({ beforeShowDay: noWeekendsOrHolidays})
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
Обновление: Обратите внимание, что с jQuery UI 1.8.19, beforeShowDay опция также принимает дополнительный третий параметр, раскрывающуюся подсказку
Если Вы не хотите, чтобы выходные появились вообще, просто:
CSS
th.ui-datepicker-week-end,
td.ui-datepicker-week-end {
display: none;
}
В этой версии месяц, день, и год определяют, какие дни блокировать в календаре.
$(document).ready(function (){
var d = new Date();
var natDays = [[1,1,2009],[1,1,2010],[12,31,2010],[1,19,2009]];
function nationalDays(date) {
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
for (i = 0; i < natDays.length; i++) {
if ((m == natDays[i][0] - 1) && (d == natDays[i][1]) && (y == natDays[i][2]))
{
return [false];
}
}
return [true];
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
$(function() {
$(".datepicker").datepicker({
minDate: new Date(d.getFullYear(), 1 - 1, 1),
maxDate: new Date(d.getFullYear()+1, 11, 31),
hideIfNoPrevNext: true,
beforeShowDay: noWeekendsOrHolidays,
});
});
});
Эта версия кода заставит вас получить даты праздников из базы данных sql и отключить указанную дату в UI Datepicker
$(document).ready(function (){
var holiDays = (function () {
var val = null;
$.ajax({
'async': false,
'global': false,
'url': 'getdate.php',
'success': function (data) {
val = data;
}
});
return val;
})();
var natDays = holiDays.split('');
function nationalDays(date) {
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
for (var i = 0; i ‘ natDays.length-1; i++) {
var myDate = new Date(natDays[i]);
if ((m == (myDate.getMonth())) && (d == (myDate.getDate())) && (y == (myDate.getFullYear())))
{
return [false];
}
}
return [true];
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
$(function() {
$("#shipdate").datepicker({
minDate: 0,
dateFormat: 'DD, d MM, yy',
beforeShowDay: noWeekendsOrHolidays,
showOn: 'button',
buttonImage: 'images/calendar.gif',
buttonImageOnly: true
});
});
});
Создайте базу данных в sql и установите праздник даты в формате ММ / ДД / ГГГГ как Varchar Поместите приведенное ниже содержимое в файл getdate.php
[php]
$sql="SELECT dates FROM holidaydates";
$result = mysql_query($sql);
$chkdate = $_POST['chkdate'];
$str='';
while($row = mysql_fetch_array($result))
{
$str .=$row[0].'';
}
echo $str;
[/php]
Happy Coding !!!! : -)
Эти ответы были очень полезны. Спасибо.
Мой вклад ниже добавляет массив, в котором несколько дней могут возвращать false (мы закрыты каждый вторник, среду и четверг). И я связал конкретные даты плюс годы и функции без выходных.
Если вы хотите, чтобы выходные были нерабочими, добавьте [суббота], [воскресенье] в массив closedDays.
$(document).ready(function(){
$("#datepicker").datepicker({
beforeShowDay: nonWorkingDates,
numberOfMonths: 1,
minDate: '05/01/09',
maxDate: '+2M',
firstDay: 1
});
function nonWorkingDates(date){
var day = date.getDay(), Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6;
var closedDates = [[7, 29, 2009], [8, 25, 2010]];
var closedDays = [[Monday], [Tuesday]];
for (var i = 0; i < closedDays.length; i++) {
if (day == closedDays[i][0]) {
return [false];
}
}
for (i = 0; i < closedDates.length; i++) {
if (date.getMonth() == closedDates[i][0] - 1 &&
date.getDate() == closedDates[i][1] &&
date.getFullYear() == closedDates[i][2]) {
return [false];
}
}
return [true];
}
});