Отображаемые изображения на элементах линейных кнопок «получены» из исходного изображения (при рендеринге используются только значения альфа-канала, но на вашем изображении все выглядит нормально). Возможно, он просто не подходящего размера - вам может понадобиться открыть файл изображения и обрезать его до нужного размера.
Вы также можете попробовать посмотреть, можно ли использовать настройку свойства imageInsets (унаследованного UIBarButtonItem из UIBarItem ) для настройки размера в способ остановить его растяжение.
Doco на изображениях элементов панели говорит следующее:
Изображения, отображаемые на панели, получены из этого изображения. Если это изображение слишком велико, чтобы поместиться на панели, оно масштабируется, чтобы соответствовать. Как правило, размер изображения панели инструментов и панели навигации составляет 20 х 20 точек.
Срезы хэша возвращают значения, связанные со списком ключей. Чтобы получить хэш-фрагмент, вы меняете сигил на @ и предоставляете список ключей (в данном случае «a»
и «b»
):
my @items = @hash{"a", "b"};
Часто вы можете использовать оператор слова кавычки для создания списка:
my @items = @hash{qw/a b/};
Вы также можете назначить хеш-срез, поэтому, если вам нужен новый хеш, содержащий подмножество другого хеша, вы можете сказать
my %new_hash;
@new_hash{qw/a b/} = @hash{qw/a b/};
Многие люди будут использовать map вместо хеш-фрагментов:
my %new_hash = map { $_ => $hash{$_} } qw/a b/;
Начиная с Perl 5.20.0, вы можете получить ключи и значения за один шаг, если вы используете% sigil вместо @ sigil:
my %new_hash = %hash{qw/a b/};
Вы Возможно, вы захотите составить список нужных вам ключей:
Еще один способ:
my @keys = qw(a b);
my %hash = (a => 1, b => 2, c => 3);
my %hash_copy;
@hash_copy{@keys} = @hash{@keys};
Слишком много функционального программирования заставляет меня сначала думать о zip
.
С установленным List :: MoreUtils ,
use List::MoreUtils qw(zip);
%hash = qw(a 1 b 2 c 3);
@keys = qw(a b);
@values = @hash{@keys};
%hash = zip @keys, @values;
К сожалению, прототип List :: MoreUtils zip
запрещает
zip @keys, @hash{@keys};
. Если вы действительно хотите избежать использования промежуточной переменной, вы можете
zip @keys, @{[@hash{@keys}]};
Или просто написать свой собственный zip
без проблемных опытный образец. (Для этого вообще не нужен List :: MoreUtils.)
sub zip {
my $max = -1;
$max < $#$_and $max = $#$_ for @_;
map { my $ix = $_; map $_->[$ix], @_; } 0..$max;
}
%hash = zip \@keys, [@hash{@keys}];
Если вы собираетесь изменять на месте,
%hash = qw(a 1 b 2 c 3);
%keep = map +($_ => 1), qw(a b);
$keep{$a} or delete $hash{$a} while ($a, $b) = each %hash;
избегает лишнего копирования, которое map
и zip
решения несут. (Да, изменение хеша во время итерации безопасно ... пока мутация удаляет только самую последнюю итерацию пары.)
При установленном List :: MoreUtils ,
use List::MoreUtils qw(zip);
%hash = qw(a 1 b 2 c 3);
@keys = qw(a b);
@values = @hash{@keys};
%hash = zip @keys, @values;
К сожалению, прототип List :: MoreUtils zip
запрещает
zip @keys, @hash{@keys};
Если вы действительно хотите избежать промежуточной переменной, вы мог
zip @keys, @{[@hash{@keys}]};
Или просто написать свой собственный zip
без проблемного прототипа. (Для этого вообще не нужен List :: MoreUtils.)
sub zip {
my $max = -1;
$max < $#$_and $max = $#$_ for @_;
map { my $ix = $_; map $_->[$ix], @_; } 0..$max;
}
%hash = zip \@keys, [@hash{@keys}];
Если вы собираетесь изменять на месте,
%hash = qw(a 1 b 2 c 3);
%keep = map +($_ => 1), qw(a b);
$keep{$a} or delete $hash{$a} while ($a, $b) = each %hash;
избегает лишнего копирования, которое map
и zip
решения несут. (Да, изменение хеша во время итерации безопасно ... пока мутация удаляет только самую последнюю итерацию пары.)
При установке List :: MoreUtils ,
use List::MoreUtils qw(zip);
%hash = qw(a 1 b 2 c 3);
@keys = qw(a b);
@values = @hash{@keys};
%hash = zip @keys, @values;
К сожалению, прототип List :: MoreUtils zip
запрещает
zip @keys, @hash{@keys};
Если вы действительно хотите избежать промежуточной переменной, вы мог
zip @keys, @{[@hash{@keys}]};
Или просто написать свой собственный zip
без проблемного прототипа. (Для этого вообще не нужен List :: MoreUtils.)
sub zip {
my $max = -1;
$max < $#$_and $max = $#$_ for @_;
map { my $ix = $_; map $_->[$ix], @_; } 0..$max;
}
%hash = zip \@keys, [@hash{@keys}];
Если вы собираетесь изменять на месте,
%hash = qw(a 1 b 2 c 3);
%keep = map +($_ => 1), qw(a b);
$keep{$a} or delete $hash{$a} while ($a, $b) = each %hash;
избегает лишнего копирования, которое map
и zip
решения несут. (Да, изменение хеша во время итерации безопасно ... пока мутация удаляет только самую последнюю итерацию пары.)
zip @keys, @{[@hash{@keys}]};
Или просто написать свой собственный zip
без проблемного прототипа. (Для этого вообще не нужен List :: MoreUtils.)
sub zip {
my $max = -1;
$max < $#$_and $max = $#$_ for @_;
map { my $ix = $_; map $_->[$ix], @_; } 0..$max;
}
%hash = zip \@keys, [@hash{@keys}];
Если вы собираетесь изменять на месте,
%hash = qw(a 1 b 2 c 3);
%keep = map +($_ => 1), qw(a b);
$keep{$a} or delete $hash{$a} while ($a, $b) = each %hash;
избегает лишнего копирования, которое map
и zip
решения несут. (Да, изменение хеша во время итерации безопасно ... пока мутация удаляет только самую последнюю итерацию пары.)
zip @keys, @{[@hash{@keys}]};
Или просто написать свой собственный zip
без проблемного прототипа. (Для этого вообще не нужен List :: MoreUtils.)
sub zip {
my $max = -1;
$max < $#$_and $max = $#$_ for @_;
map { my $ix = $_; map $_->[$ix], @_; } 0..$max;
}
%hash = zip \@keys, [@hash{@keys}];
Если вы собираетесь изменять на месте,
%hash = qw(a 1 b 2 c 3);
%keep = map +($_ => 1), qw(a b);
$keep{$a} or delete $hash{$a} while ($a, $b) = each %hash;
избегает лишнего копирования, которое map
и zip
решения несут. (Да, изменение хеша во время итерации безопасно ... пока мутация удаляет только самую последнюю итерацию пары.)
Хеш - это неупорядоченный контейнер, но термин срез действительно имеет смысл только в терминах упорядоченного контейнера. Возможно, изучите использование массива. В противном случае вам, возможно, придется просто удалить все элементы, которые вы не хотите создавать для своего «вспомогательного хеша».
FWIW, здесь я использую Moose :: Autobox:
my $hash = { a => 1, b => 2, c => 3, d => 4 };
$hash->hslice([qw/a b/]) # { a => 1, b => 2 };
В реальной жизни я использую это для извлечения «имени пользователя» и «пароля» из отправки формы и передачи их в $ c-> Authenticate
(который в моем случае ожидает хэш-ссылку, содержащую имя пользователя и пароль, но ничего больше).